مبانی C# (Fundamentals)
مفاهیم پایهای که هر برنامهنویس C# باید قبل از فریمورکها بلد باشد: CLR، CTS/CLS، Managed Code، Stack/Heap و Garbage Collection.
چرا مهم است؟
این مفاهیم پایه درک شما از نحوه اجرای واقعی کد C# در پسزمینه، مدیریت حافظه و رفتار Runtime را شکل میدهند و پیشنیاز مباحث پیشرفتهتر مثل Performance و Reflection هستند.
CLR (Common Language Runtime)
محیط اجرای برنامههای .NET است؛ مسئول اجرای کد، مدیریت حافظه، Garbage Collection و Exception Handling. زبانهایی مثل C# و F# روی آن اجرا میشوند.
CTS و CLS
CTS (Common Type System) استاندارد تعریف نوعها در .NET است و باعث میشود زبانهای مختلف با هم کار کنند:
int age = 25;
string name = "Ali";
CLS (Common Language Specification) مجموعه قوانین مشترک برای سازگاری زبانهاست؛ کتابخانه نوشتهشده با یک زبان در زبان دیگر هم قابل استفاده میشود.
Managed Code در برابر Unmanaged Code
Managed Code توسط CLR مدیریت میشود و دارای Garbage Collection است (مثلاً یک اپلیکیشن C#). Unmanaged Code خارج از کنترل CLR اجرا میشود و مدیریت حافظه به عهده برنامهنویس است (مثلاً کد Native ++C).
Value Type و Reference Type
| Value Type | Reference Type |
|---|---|
مقدار واقعی، معمولاً در Stack (int x = 10;) |
آدرس داده، معمولاً در Heap (Person p = new Person();) |
Stack و Heap
Stack سریعتر است و برای دادههای کوتاهعمر با مدیریت خودکار استفاده میشود. Heap برای Objectها استفاده میشود و توسط Garbage Collector مدیریت میشود.
Garbage Collection و نسلهای GC
GC حافظه Objectهای بدون Reference را آزاد میکند:
var user = new User();
user = null; // بعداً GC حافظه را آزاد میکند
GC حافظه را به سه نسل تقسیم میکند تا Performance بهتر شود:
| Generation | کاربرد |
|---|---|
| Gen 0 | Objectهای کوتاهعمر |
| Gen 1 | Objectهای متوسط |
| Gen 2 | Objectهای بلندعمر |
Assembly و Namespace
Assembly واحد اصلی Deployment در .NET است (.dll یا .exe) و شامل کد IL، Metadata و Manifest میشود. Namespace برای سازماندهی کلاسها استفاده میشود:
namespace MyApplication.Services
{
class UserService { }
}
کلاس، Object، Constructor و Access Modifier
class User
{
public string Name { get; set; }
public User() => Console.WriteLine("Created");
}
| Modifier | دسترسی |
|---|---|
public |
همهجا |
private |
فقط داخل کلاس |
protected |
کلاس و فرزند |
internal |
همان Assembly |
Exception Handling
try { int x = 10 / 0; }
catch (Exception ex) { Console.WriteLine(ex.Message); }
Compilation در .NET
C# Code → Compiler → IL Code → CLR + JIT → Machine Code
کد C# ابتدا به IL تبدیل میشود و JIT در زمان اجرا آن را به کد ماشین تبدیل میکند.
نکته کلیدی: CLR اجرای برنامه را مدیریت میکند، CTS/CLS سازگاری بین زبانهای .NET را تضمین میکنند، و GC با تقسیم حافظه به نسلهای Gen 0/1/2 مدیریت حافظه را بهینه میکند.
خلاصه
- CLR محیط اجرای .NET است و مدیریت حافظه، اجرای کد و Exception Handling را انجام میدهد.
- Value Type روی Stack و Reference Type روی Heap ذخیره میشود؛ GC حافظه Heap را با تقسیم به نسلهای Gen 0/1/2 مدیریت میکند.
- کد C# قبل از اجرا به IL تبدیل و توسط JIT به Machine Code تبدیل میشود.
