Null و Nullable Reference Types
Null و Nullable Reference Types
بخشی از آموزش جامع C# و .NET 10
محتوای درس Null و Nullable Reference Types
Null یکی از منابع اصلی خطا در نرمافزار است. Nullable Reference Types تحلیل کامپایلر را برای مشخص کردن قرارداد null به کد اضافه میکند و طراحی API را شفافتر میسازد.
۱. Nullable Value Types
Value Typeها با ? میتوانند null بپذیرند؛ مانند int?.
مثال
int? id=null; Console.WriteLine(id ?? 0);در این مثال، مفهوم «Nullable Value Types» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۲. Nullable Reference Types
string و string? قراردادهای متفاوتی دارند و کامپایلر مسیرهای احتمالی null را تحلیل میکند.
مثال
string? name=null; Console.WriteLine(name?.Length ?? 0);در این مثال، مفهوم «Nullable Reference Types» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۳. Null-conditional
?. و ?[] دسترسی به عضو را فقط در صورت non-null بودن انجام میدهند.
مثال
User? u=null; Console.WriteLine(u?.Name ?? "Unknown");در این مثال، مفهوم «Null-conditional» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۴. Null-coalescing
?? مقدار جایگزین و ??= مقداردهی در صورت null را فراهم میکنند.
مثال
string? x=null; x ??= "Default"; Console.WriteLine(x);در این مثال، مفهوم «Null-coalescing» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۵. Null-forgiving
! هشدار تحلیلگر را خاموش میکند اما مقدار را تغییر نمیدهد؛ بنابراین باید محدود و مستدل استفاده شود.
مثال
for(int i=1;i<=5;i++) Console.WriteLine(i);در این مثال، مفهوم «Null-forgiving» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۶. مثالهای عملی
string? name = GetName();
int length = name?.Length ?? 0;
string displayName = name ?? "Unknown";این نمونه عملی چند مفهوم فصل را در کنار هم قرار میدهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.
static void PrintName(string name)
{
ArgumentException.ThrowIfNullOrWhiteSpace(name);
Console.WriteLine(name);
}این نمونه عملی چند مفهوم فصل را در کنار هم قرار میدهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.
۷. خطاهای رایج
• خاموش کردن گسترده هشدارها با !
• استفاده از string? برای هر داده بدون تحلیل قرارداد
• بررسی null دیرهنگام پس از چند مرحله پردازش
۸. نکات اجرایی
• نامها، Typeها و Methodها را متناسب با مفهوم دامنه و بدون ابهام انتخاب کنید.
• هشدارهای کامپایلر و Nullable را بدون بررسی خاموش نکنید.
• منطق هر بخش را تا حد امکان کوچک، قابل تست و مستقل از I/O غیرضروری نگه دارید.
۹. تمرین عملی
مدلی برای Profile طراحی کنید که Name اجباری و Bio اختیاری باشد و متدی برای نمایش امن اطلاعات ایجاد کنید.
۱۰. جمعبندی
در این فصل، مبانی «Null و Nullable Reference Types» با تمرکز بر ساختارهای اصلی زبان، الگوهای صحیح استفاده و خطاهای رایج بررسی شد. تسلط بر این مفاهیم زمینه لازم برای اتصال موضوع به فصلهای بعدی و طراحی کدهای خواناتر، قابل نگهداری و قابل تست را فراهم میکند.