تفاوت های کلاس و Struct - از کتاب Microsoft 70-536

  1.  کلاس ReferenceType ای است که در Heap ذخیره می شود در حالیکه Struct از نوع ValueType است و در Stack ذخیره می شود.
  2. کلاس از inheritace  پشتیبانی می کند اما Struct نمی کند.
  3.  به خاطر بالا رفتن Performance برای حجم داده ای کم یعنی کمتر از 16 بایت استفاده از Struct توصیه می شود.
  4.  Struct مانند کلاسConstructor ها را پشتیبانی می کند اما no-parameter Constructor را پشتیبانی نمی کند.
  5. همه ی کلاس های دات نت  به طور مستقیم از System.Object مشتق می شوند اما Struct از System.ValueType مشتق می شود یعنی Struct به طور غیرمستقیم از System.Object مشتق می شود.

معرفی ویژگی هایی از Struct - از کتاب Microsoft 70-536

  1.  Struct ها هم می توانند اینترفیس ها را پیاده ساز ی کنند.  یعنی علیرغم اینکه Inheritance را پشتیبانی نمی کنند از Inheritance از اینترفیس ها پشتیبانی می کنند.
  2. Struct ها همیشه می توانند از System.ValueType مشتق شوند و همچنین می توانند از یک یا چند اینترفیس که توسط برنامه نویس تعیین شده است، مشتق شود.

معرفی ویژگی های کلاس - از کتاب Microsoft 70-536

  1.  به صورت پیش فرض همه متدها و فیلدهای کلاس به صورت Private تعریف می شود.
  2. استفاده از دو کلاس با نام های یکسان که در حد حروف کوچک و بزرگ متفاوت هستند، صحیح نمی باشد. این کلاس ها در زبان هایی مثال ویژوال بیسیک که به حروف حساس نیست کار نمی کند.
  3.  بسته به نوع داده، فیلدهای داخل کلاس با مقادیر 0، false و null مقداردهی می شود اما با این حال بهتر است که مقداردهی به صورت صریح انجام شود.
  4.  Constructor متدی هم نام کلاس است که می تواند پارامترهای ورودی دریافت کند اما هیچ خروجی ندارد.
  5.  Consructor پیش فرض به آن Constructor ای گفته می شود که پارامتر ورودی نداشته باشد، حالا فرقی ندارد که توسط برنامه نویس ایجاد شده باشد یا توسط کامپایلر.
  6.  اگر Constructor کلاسی به صورت Private تعریف شده باشد، یعنی نمی توان از آن کلاس Instance ایجاد کرد در حقیقت هر وقت بخواهیم Instance ساختن کلاس را محدود کنیم بهتر است سراغ AccessModifier گذاشتن برای Constructorآن برویم که از اینکه کلاس را abstract کنیم بهتر است.
  7.  اگر خودتان Constructor ایجاد کنید، کامپایلر Constructor پیش فرض را ایجاد نخواهد کرد و در صورت نیاز پیش فرض را نیز خودتان باید پیاده سازی کنید.
  8.  از کلاس های Abstract نمی توان Instance ایجاد کرد. در این کلاس های پایه صرفاً تعریف متدها و Property هایی عنوان گردیده و در آینده در کلاس های فرزند توسعه داده خواهند شد. فرزندها می توانند آن متدها یا Property ها را Override کنند. کلاس Abstract حداقل یک متد Abstract باید داشته باشد.
  9. وقتی متدی Abstract است یعنی جزئیات پیاده سازی اش را نمی دانیم و دوست داریم فرزندانش آن را پیاده سازی کنند. پس متد مجرد بدنه ندارد و کلاس فرزند حتماً باید آن را پیاده سازی کند وگرنه خودش هم می شود یک کلاس Abstract
  10. اگر فیلدی در کلاس بصورت static اعلان گردد این بدین معنی است که  کامپایلر فقط یک کپی از متغیر مذکور را نگهداری نموده و تمام object ها بایستی بصورت اشتراکی از آن کپی استفاده نمایند. برای اینکار می‌بایستی از کلمه static قبل از اعلان عضو استفاده نمود. از طریق کلاس می توان به آن فیلد دسترسی داشت.
  11. داده ها و متدهای داخل کلاس به عنوان اعضای کلاس شناخته می شوند. اعضا از نظر دسترسی می توانند حالت های زیر را داشته باشند:
  12. ·         Public: از خارج کلاس قابل دسترسی هستند. صفاتی هستند که در داخل یک Class وجود داشته،درون یک Class قابلیت خواندن و نوشتن خواهند داشت و در اختیار نمونه هایی که از روی یک کلاس تولید می شوند نیزقرار می گیرند و در داخل اشیاء نیز قابلیت خواندن و نوشتن را خواهندداشت.
  13. ·         Private: برای کد داخل خود کلاس قابل دسترسی می باشد. صفاتی هستند که درون یک کلاس وجود دارند قابلیت خواندن و نوشتن خواهند داشت اما در اختیار نمونه های تولید شده از کلاس قرار نگرفته و اشیاء دیگر قدرت استفاده از این صفات را نخواهند داشت.
  14. ·         Protected: برای کلاس های مشتق شده از این کلاس و برای کلاس های In Question قابل دسترسی است. صفاتی هستند که در داخل کلاس و نمونه های تولید شده از کلاس وجود داشته در داخل کلاس به شکل خواندنی و نوشتنی خواهند بود اما درون اشیاء دیگریا به شکل فقط خواندنی یا به شکل فقط نوشتنی ظاهر خواهند شد.
  15. یکی از ویژگی های جدید در C# این است که می توان  برای کلاس no-Parameter Constructor نوشت که Static باشد. یکی از دلایل چنین Costructor ای به صورت Static  این است که ممکن کلاس مورد نظر دارای فیلدها و یا Properties هایی باشد که نیاز به مقداردهی اولیه داشته باشند قبل از اینکه کلاس مورد استفاده قرار بگیرد.
  16.   Constructor ای که از نوع Static است قبل از اولین Call شدن عضوی از اعضای کلاس، اجرا خواهد شد.
  17.  Constructor ای که از نوع Static است هیچ AccessModifier ای ندارد. این متد توسط هیچ کدی فراخوانی نمی شود و همیشه توسط Dot Net RunTime قبل از Load شدن کلاس فراخوانی می شود. به همین دلیل Static Constructor نباید پارامتری داشته باشد. یعنی به صورت no-Parameter است و همچنین به همین دلیل فقط یک Static constructor برای هر کلاس می تواند وجود داشته باشد. واضح است که Static Constructor فقط به اعضای Static کلاس می تواند دسترسی داشته باشد و به Instance Member ها نمی تواند دسترسی داشته باشد.
  18. اگر در یک کلاس Static constructor و هم No-Parameter  instance Constructor داشته باشیم مشکلی پیش نمی آید زیرا اولی در زمان Load شدن کلاس و دومی در زمانی که از کلاس Instance ساخته می شود اجرا می شوند.
  19. اگر چند کلاس داشته باشیم که Static Constructor دارند، مشخص نیست که Constructor کدامیک ابتدا اجرا می شود. بنابراین نباید در Constructor های Static  آنها کدهایی نوشت که به اجرا شدن یا اجرا نشدن یک Static Constructor دیگر وابسته باشد.
  20. اگر یک کلاس عضوی غیر از متدها و Properties های Static نداشته باشد، خود کلاس نیز می تواند به عنوان Static تعریف شود.
  21.  یک کلاس Static از نظر کاربرد مانند کلاسی است که private static Constructor دارد.  امکان ایجاد Instance از این کلاس وجود ندارد و در صورت ایجاد Instance از چنین کلاسی، خطای کامپایلر به وجود می آید و این خود تضمینی است برای جلوگیری از ایجاد Instance از این کلاس.
  22.  کلاس ها می توانند از فقط یک کلاس دیگر که برنامه نویس تعیین می کند مشتق شوند وهمچنین  از یک یا چند اینترفیس مشتق شود.
  23.  کلاس های Abstract نمی توانند instantiate شوند.
  24.  در C# کلاس ها RefrenceType  هستند.
  25. با توجه به اینکه Class‌ها قابلیت استفاده مستقیم را ندارند از روی هر کلاس میتوان نمونه یا نمونه هایی را تولید کرد.
  26.  بر اساس همین نمونه سازی از کلاس، کلاس ها به سه دسته تقسیم می شوند:
  27. ·         Multitone Class: کلاس هایی هستند که می توانند بیش از یک نمونه از خود تولید کنند که هر نمونه از نوع یک کلاس منحصر به فرد باشد.
  28. ·         Singletone Class:کلاس هایی هستند که با آن که می توانند نمونه یا نمونه هایی از خود را تولید کنند اما تنوع تولید نمونه در آنها وجود نداشته وکلیه نمونه ها از روی یک کلاس تولید می شوند.
  29. ·         Utility Class: کلاس هایی هستند که توانایی تولید هیچ نمونه ای از خود را نخواهند داشت.
  30.  ارتباط بین کلاس ها در مدل های شی گرا ارتباط Generalization، Association و Dependency می باشد.
  31.  ارتباط Association شامل ارتباطات زیر می باشد:
  32. ·         Normal: جایی که نمونه های کلاس پیام های را به نمونه های کلاس دیگر ارسال می کند یک ارتباط بین آنها بوجود آمده است.
  33. ·         Aggrigation: در رابطه تجمع، شی جز به شی کل وابسته نیست. شی کل و جزء در زمانهای مختلف ایجاد و از بین می رود یعنی ممکن است شی جزء را ایجاد کنید بدون اینکه شی کل را یجاد کنید. برای مثال شی موتور و لاستیک را ایجاد می کنید بدون اینکه شی ماشین را ایجاد کنید. یا بر عکس ممکن است شی ماشین را با اشیاء که قبلا وجود داشته اند ایجاد کنیم بدون اینکه نیاز باشد همزمان با ایجاد ماشین، آنها را ایجاد کنیم.برای مثال یک کلاس برای تیم پروژه در نظر بگیرید. و یک کلاس برای کارمندان شرکت در نظر بگیرید. تیم پروژه، از کارمندان شرکت تشکیل شده است. اما ممکن است یک تیم پروژه منحل شود در حالیکه کارمندان به کار خود در شرکت ادامه می دهند.
  34. ·         Composition: برای مثال یک پنجره در سیستم عامل ویندوز را در نظر بگیرید، یک پنجره از چندین شی تشکیل شده است بعنوان مثال دکمه Minimize، Maximize، Close ، یک منو و .... زمانیکه یک شی پنجره ایجاد می شود همزمان با آن تمام دکمه ها و منو ایجاد می شود. با بستن پنجره تمام اشیاء، پنجره، دکمه ها و منو از بین می روند. امکان ندارد بدون وجود یک شی پنجره یک شی منو ایجاد شود و به کاربر نمایش داده شود یا با بستن و از بین رفتن شی پنجره، شی منو از بین نرود. رابطه ترکیب همان حذف پخش شونده (cascading deletion) است. در یک رابطه ترکیب هنگامیکه رکورد اصلی حذف می شود تمام رکورد های مرتبط با رکورد اصلی حذف می شوند.

معرفی ویژگی هایی از سرویس - از کتاب Microsoft 70-536

  1.  سرویس callable entities or application functionalities است که از طریق مبادله پیام قابل دسترسی می باشد. برای تسهیل این مبادلات برای WebService ها یک قرارداد واضح – اینترفیس- تعریف شده است.
  2.  استفاده کننده ی سرویس برای استفاده از سرویس ابتدا به سرویس دایرکتوری مراجعه می کند تا سرویس را بیابد و استفاده کند و در صورت نبودن سرویس به Service Provider درخواست ایجاد این سرویس را ارسال می کند. 
  3. سرویس می تواند به هر زبانی نوشته شده باشد و البته توصیف آن در Web Services Description Language که به اختصار WSDL نامیده می شود، آمده باشد.

معرفی ویژگی هایی از #C - از کتاب Microsoft 70-336

  1.  همه چیز در داخل کلاس تعریف می شود.
  2.  متد Main در C# به صورت Static است که معادل GlobalMethod در ویژوال بیسیک است.
  3. متد Main در C# به صورت Static تعریف می شود تا کامپایلر برای اجرای آن که اولین متدی است که اجرا می گردد، مجبور نباشد که Instance ایجاد نماید.
  4. در C# امکان تخصیص مقدار پیش فرض به پارامتر متد وجود ندارد. مثلا Void Method(int I = 42){}  صحیح نمی باشد.
  5. در C# تعریف کلاس ها و پیاده سازی آنها در فایل های جداگانه نیست و هر دو در یکجا انجام می شود. فقط با استفاده از مفهوم PartialClass می توان یک کلاس را در چندین فایل آورد.
  6. اگر دو کلاس تابع Main داشته باشند، در زمان اجرای برنامه در CommandLine باید مشخص شود که کدام Main اجرا شود.
  7. زبان c# برای دات نت فریم ورک که یک PlatForm غنی برای پیاده سازی، راه اندازی و اجرای سیستم های توزیع شده می باشد، به وجود آمده است.
  8.  این زبان بر اساس متدولوژی پیشرفته ObjectOriented است که حاصل تجربه 20 ساله مایکروسافت در این زمینه می باشد.
  9.  اگر چه C# برای دات نت فریم ورک به وجود آمده است اما زبانی مستقل است و بخشی از دات نت فریم ورک محسوب نمی شود. 
  10.  بخشی از ویژگی های دات نت فریم ورک توسط C# پشتیبانی نمی شود و همچنین برخی از ویژگی های C# توسط دات نت فریم ورک پشتیبانی نمی شود مانند Operator Overloading
  11. کدی که تحت (Common Language Runtime)CLR اجرا می شود، Managed Code نامیده می شود.
  12. قبل از اینکه کد در CLR اجرا شود، نیاز به کامپایل شدن دارد.
  13. کامپایل برنامه در دو مرحله در دات نت اتفاق می افتد:  
  • کامپایل کد به IL  
  • کامپایل از IL به Platform Specific Code توسط CIL