۱۴۰۴/۰۷/۰۹
مفاهیم سی شارپ
۱. مفاهیم پایه و انواع دادهها
- Value Type vs Reference Type
- Value Type (مثل
int,struct) در stack ذخیره میشود و هنگام انتساب، مقدار کپی میشود. - Reference Type (مثل
class,string) در heap ذخیره میشود و هنگام انتساب، مرجع کپی میشود. - نکته: boxing/unboxing میتواند value type را به reference type تبدیل کند و بالعکس.
- Value Type (مثل
- Nullable types
- برای مقداردهی
nullبه value type ازint?یاNullable<int>استفاده میکنیم.
- برای مقداردهی
۲. کلاسها و ارثبری
sealed→ کلاس را نمیتوان ارثبری کرد.abstract→ میتواند متد abstract داشته باشد و نمیتوان از آن نمونه ساخت.virtual,override,new→ قواعد پلیمورفیسم:virtual+override→ پلیمورفیسم واقعی.new→ متد پایه را مخفی میکند، اگر مرجع پایه باشد نسخه پایه اجرا میشود.
- Access modifiers
- پیشفرض اعضای کلاس
privateهستند. internal→ دسترسی در همان assembly.protected→ دسترسی در کلاس و مشتقات.
- پیشفرض اعضای کلاس
۳. متدها و async
async+await→ برای عملیات غیرهمزمان، معمولاً متد نوعTaskیاTask<T>دارد.- نکته مهم: سازنده نمیتواند async باشد.
Task.Run→ کار را روی ThreadPool میبرد، نه حتماً thread جدید.
۴. Exception handling
- بلوکها:
try→catch→finally. - نکته مهم:
finallyهمیشه اجرا میشود حتی بعد ازreturn. using→ تضمین میکندDisposeفراخوانی شود حتی اگر exception رخ دهد.
۵. Delegates, Event و Lambda
- Delegate → نوع مرجع به متد، میتواند متد را نگه دارد و فراخوانی کند.
- Event → خارجیها فقط میتوانند subscribe/unsubscribe کنند.
- Lambda و Action/Func → رایج برای کوتاه کردن کد.
۶. LINQ و Collections
- Deferred execution → query تا وقتی که enumerate نشود اجرا نمیشود (
ToList()برای فورس اجرا). - مجموعهها و thread-safety:
List<T>وDictionary<K,V>→ thread-safe نیستند.ConcurrentDictionaryوConcurrentBag→ thread-safe هستند.
۷. جنریکها (Generics)
- برای type-safety و جلوگیری از boxing استفاده میشوند.
List<int>سریعتر و امنتر ازArrayListاست.
۸. Equality و Comparison
==→ مقایسه reference برای کلاسها، مگر overload شود.Equals()→ متد مجازی برای مقایسه محتوا، قابل override.IComparable<T>→ مرتبسازی قابل پیادهسازی.
۹. Readonly و Const
const→ ثابت کامپایلتایم، static ضمنی، فقط مقداردهی در تعریف ممکن.readonly→ مقداردهی در تعریف یا سازنده، runtime مجاز است.
۱۰. Memory و Performance
- Stack سریعتر از heap است.
- Value type → در stack ذخیره و سریع هستند.
- Reference type → heap و مدیریت توسط Garbage Collector.
- Boxing → هزینه اضافی دارد، سعی کن با generics از آن جلوگیری کنی.
Accept Cookies
[your-shortcode]