در مورد C# و شی گرایی اش

  1. اعضای استاتیک کلاس تنها از روی نام کلاس قابل دسترسی هستند نه از روی نمونه ی ایجاد شده از روی کلاس. 
  2.  نوع دیگر سازنده ها سازنده های استاتیک هستند که برای مقداردهی به اعضای استاتیک کلاس استفاده می شوند. 
  3.    ِDestructor ها هیچ پارامتر ی در یافت نکرده و هیچ مقداری برنمی گردانند و زمانی فراخوانی می شود که GC تصمیم به حذف شی مورد استفاده ی برنامه از حافظه و آزادسازی منابع داشته باشد. 
  4.  لیستی از انواعی که می توان در کلاس از آنها استفاده کرد به شرح زیر می باشد:
  • Constructors
  • Destructors
  • Fields
  • Methods
  • Properties
  • Indexers
  • Delegates
  • Events
  • NestedClasses       
  1.  سی شارپ فقط ارث بری یگانه را پشتیبانی می کند. یعنی فقط از یک کلاس پایه می توان ارث بری کرد. البته ارث بری چندگانه را از اینترفیس ها می توان داشت. 
  2.  با استفاده از کلمه ی کلیدی Base می توان به هر یک از اعضای Public  و Protected کلاس Base دسترسی داشت. 
  3.  با کلمه ی کلیدی new کلاس Child می تواند متدی از کلاس Base را مخفی نماید. 
  4.  وقتی در متدی از کلاس پیشوند Virtual استفاده می شود یعنی فرزندان این کلاس می توانند این متد را برای خود Override کنند. 
  5.  متدهای override شده باید دارای نوع برگشتی و پارامترهای مشابه متد اصلی باشند. 
  6.  ارث بری باعث می شود که کلاس های مشتق شده  بتوانند مانند کلاس های پایه ی خود عمل کنند. 
  7.  نمی توان سازنده ی بدون پارامتر برای Struct تعریف کرد. بنابراین اگر حتماً می خواهید که سازنده ای بدون پارامتر داشته باشید، کلاس تنها انتخاب شماست.{در مقایسه بین انتخاب کلاس و یا انتخاب Struct
  8.  Struct ها دارای Deconstructor نیستند. 
  9.  در مورد Struct ها ارث بری از یک Struct امکان پذیر نیست اما ارث بری از اینترفیس ها وجود دارد. 
  10.  هر کلاس یا Struct که از یک اینترفیس ارث ببرد باید همه ی متدهای آن را پیاده سازی نماید. 
  11.  Struct چون ValueType است در Stack ذخیره می شود و کلاس در Heap 
  12.   ValueType ها مستقیماً مقدار را در خد نگهداری می کنند و به همین دلیل است که در Stack نگهداری می شوند. 
  13.  اینترفیس ها برای ایجاد پروتکلی بین کلاس ها هستند. البته در برخی از زبان های برنامه نویسی به جای استفاده از کلمه ی کلیدی اینترفیس از پروتکل استفاده می کنند. 
  14.  وقتی اینترفیس A از اینترفیس B ارث برده است، کلاسی که از اینترفیس B ارث  می برد باید متدهای موجود در هر دو اینترفیس A و B را پیاده سا زی کند. 
  15.  اینترفیس از نوعRefrenceType  است. 
  16.  تفاوت بین ارث بری از کلاس و ارث برای از اینترفیس را می توان چنین توصیف کرد که در ارث بری از کلاس «است» و «بودن» است و ارث بری از اینترفیس پساده سازی کردن ان است. وقتی کلاس ماشین از کلاس وسایل نقلیه ارث می برد می گوییم ماسین وسیله ی نقلیه است. 
  17.  نمی توان یک اینترفیس را به صورت Virtual  تعریف کرد. 
  18. هدف از ایجاد اینترفیس تعیین توانایی هایی است که از کلاس انتظار داریم. 
  19.  برای متدهای موجود در اینترفیس سطح دسترسی تعریف نمی شود. 
  20. اینترفیس تنها نوع برگشتی و پارامترهای متد را مشخص می کند و پیاده سازی آن به عهده ی کلاسی است که از آن مشتق شده است. 
  21. از روی یک اینترفیس نمی توان نمونه ایجاد کرد بلکه باید کلاسی آن را پیاده سازی کند. 
  22.  کلاسی که از یک اینترفیس ارث می برد، در حقیقت فرم و ساختار کلی خود را از آن اینترفیس دریافت کرده است و نحوه ی رفتار و پیاده سازی آن را خود انجام می دهد.

پارامترها و متدها در #C

  1. در سی شارپ دو گونه متد وجود دارد. متد Static و متد Instance
  2.  چهارگونه پارامتر در سی شارپ وجود دارد که عبارتند از Ref، Value، out و Parames 
  3.  در مورد پارامترهایی که By Value ارسال می شوند، محلی هستند و تغییرهای ایجاد شده بر روی متغیر اصلی تاثیر نمی گذارد. 
  4.  در مورد پارامترهایی که By Ref ارسال می شوند، هر تغییری که بر روی متغیرهای محلی اعمال می شود، بر روی متغیر اصلی نیز تاثیر می گذارد. 
  5.  پارامترهایی که به صورت Params هستند باید از تایپ Array و یا JoggedArray باشند. 
  6.  در هر متدی تنها یکبار می توان از Params استفاده کرد و پس از به کار بردن Param دیگر هیچ آرگومان دیگری نمی توان تعریف کرد.

اعمال ++ برمتغیر X و نسبت دادن آن به متغیر Z در #C

  1. در حالت ++x ابتدا جمع بر روی X اعمال می شود و هم اثرش به X منتقل می شود و هم به Z یعنی متغیری که حاصل به آن Assign شده است. 
  2.   در حالت X++  ابتدا مقدار فعلی X به متغیر مورد نظر یعنی Z منتقل می شود و سپس ++بر X اعمال می شود و اثرش به X منتقل می شود.

در مورد Attribute در #C

  1. هر Attribute جدیدی که می نویسیم یک کلاس جدیدی است که از System.Attribute مشتق شده است.  
  2.  Attribute ها می توان به کلاس، اینترفیس، اسمبلی و ... اضافه کرد. 
  3.  Attribute ها به برنامه ی ما MetaData اضافه می کنند. 
  4.  در حقیقت Attribute ها کلاس هایی هستند که می توان آنها را با زبان C# ایجاد کرد و برای افزودن اطلاعات توضیحی به کد، از آنها استفاده کرد. این اطلاعات در زمان اجرای برنامه ازطریق Reflection قابل دسترسی است. 
  5.  Attribute ها را داخل دو براکت قرار می دهند یعنی به صورت [attributename] 
  6. Attribute ها می توانند پارامتر هم بگیرند که در این صورت اختیارات بیشتری را در اختیار برنامه قرار می دهند. 
  7. هم می تواند از Attribute های دات نت فریم ورک استفاده کرد و هم می توان Attribute های مورد نظر خود را ایجاد نمود.

در مورد NameSpace در #C

  1. Namespace  مشخص می کند که شما از کدام توابع کتابخانه ای استفاده می کنید 
  2.   وقتی اول برنامه   Using Systemرا بیاوریم یعنی نیازی نیست که هر دفعه موقع استفاده از توابع کتابخانه ای System کلمه ی system را تکرار کنیم. 
  3.  اگر استفاده از NameSpace ای به دلیل طولانی بودن آن دشوار بود می توان نام کوتاه تری به آن تخصیص داد. به عنوان مثال نام sample1.TestNameSpace را می توان در ایتدای پروژه که Using ها نوشته می شود به نام TTT تغییر داد:

using TTT = sample1.TestNameSpace;

  1.  هر یک از انواع زیر می توانند دارای NameSpace باشند:
  •  Classes
  •  Structures
  • Interfaces
  • Enumerations
  • Delegates