کلاس NullReferenceException
نام دوره: زبان سی شارپ مقدماتی
نویسنده: علی مقدم جاه (مدرس دوره)
کلاس NullReferenceException چیست؟
در پست آموزش کلاس Exception، با توضیحات اولیه در رابطه با تفاوت میان ارور و استثنا آشنا شدهاید.
فرض کنید برنامهای نوشته اید تا نام و نام خانوادگی کاربری را از دیتابیس فراخوانی کرده و پس از محاسبه تعداد کاراکترهای آن، در خروجی چاپ نماید:
string FullName = "Ali Moghadam Jah";
Console.WriteLine(FullName.Length);
در این حالت اگر کد را اجرا کنید، کامپایلر بدون مشکل برنامه را اجرا کرده و عدد ۱۶ را چاپ میکند.
اما فرض کنید که کاربر بعد از ثبت نام با شماره موبایل خود، همچنان اقدام به تکمیل پروفایل خود نکرده و در نتیجه پراپرتی نام و نام خانوادگی این کاربر در ستونهای مربوط به خود در دیتابیس خالی است؛ در این حالت مقدار null از دیتابیس بازگردانده خواهد شد:
string FullName = null;
Console.WriteLine(FullName.Length);
حالا اگر این کد را در IDE خود اجرا کنید، قطعا با خطا مواجه خواهید شد.
برای جلوگیری از بروز این خطا، باید از دستور try catch استفاده نمایید:
try
{
string FullName = null;
Console.WriteLine(FullName.Length);
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
همانطور که در قطعه کد بالا مشاهده میکنید، ما قسمتی از کدهای خود را که احتمال بروز خطا یا استثنا داشتند، درون محدوده بلاک try قرار دادهایم، اینکار یعنی داریم به سیستم میفهمانیم که تلاش کن این کدها را اجرا کنی، اگر توانستی کدها را اجرا کنی که چه خوب و بیخیال کدهای داخل بلاک Catch بشو، اما اگه کدهای داخل بلاک try به مشکلی برخوردند، حالا کدهای داخل بلاک catch را اجرا کن.
همچنین در محدوده بلاک catch، به عنوان ورودی متد WriteLine، پراپرتی Message را توسط شئ ex فراخوانی کردیم.
این پراپرتی، توانایی چاپ علت ارور بوجود آمده را به شکل مناسب و بدون نمایش (لو رفتن) کدهای برنامهنویسی به کاربران را دارد.
شئ ex از کلاس پشت سر خود یعنی Exception تعریف شده است که میبایست حتما در پرانتز Catch نوشته شود.
نکته: اگر نمیدانستید که ممکن است این چند خط کد چه خطایی را بوجود آورند، میتوانید مثل مثال بالا از کلاس Exception تنها استفاده کنید.
اما اگر مثل الان میدانستید که خطای مربوط به ارجاع مقدار null ممکن است بهوجود آید، پس بهتر است به جای استفاده از کلاس والد (Exception)، از کلاس فرزند مختص به این استثنا استفاده کنید:
try
{
string FullName = null;
Console.WriteLine(FullName.Length);
}
catch (NullReferenceException ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
جهت شرکت در دورههای زبان برنامه نویسی سیشارپ، از کد تخفیف heplc30 استفاده کنید.