۱۴۰۴/۰۷/۰۹ Nebular

مفاهیم سی شارپ

۱. مفاهیم پایه و انواع داده‌ها

  • Value Type vs Reference Type
    • Value Type (مثل int, struct) در stack ذخیره می‌شود و هنگام انتساب، مقدار کپی می‌شود.
    • Reference Type (مثل class, string) در heap ذخیره می‌شود و هنگام انتساب، مرجع کپی می‌شود.
    • نکته: boxing/unboxing می‌تواند value type را به reference 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

  • بلوک‌ها: trycatchfinally.
  • نکته مهم: 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
Accept Cookies
[your-shortcode]