📖 سری آموزشی کتاب C# 12 in a Nutshell
چطور #C جلوی خطاهای مربوط به نوع داده رو میگیره؟ این زبان از یه سیستم امنیتی دو لایه استفاده میکنه: بررسی استاتیک در زمان کامپایل و بررسی در زمان اجرا.
امروز میخوایم با این دو لایه امنیتی و ابزارهای بازرسیشون آشنا بشیم.
این اولین خط دفاعی شماست. کامپایلر #C قبل از اینکه حتی برنامه رو اجرا کنید، کد شما رو بررسی میکنه تا مطمئن بشه که شما نوعهای داده رو به درستی استفاده کردید. این کار جلوی یه عالمه باگ رو در نطفه خفه میکنه.
بعضی وقتا کامپایلر نمیتونه از همه چیز مطمئن باشه (مثلاً موقع Downcasting). اینجا CLR (محیط اجرای داتنت) وارد عمل میشه.
هر آبجکتی که روی هیپ ساخته میشه، یه "توکن نوع" با خودش داره. CLR در زمان اجرا، از این توکن برای چک کردن صحت عملیات کستینگ استفاده میکنه.
برای اینکه خودمون اطلاعات یه نوع رو بدست بیاریم، دو تا ابزار اصلی داریم:
🔹️ GetType() (برای زمان اجرا):
این یه متده که روی یک نمونه (instance) از آبجکت صدا زده میشه و نوع دقیق اون آبجکت رو در زمان اجرا به ما میده.
🔹️ typeof (برای زمان کامپایل):
این یه اپراتوره که اسم یه نوع (Type) رو میگیره و آبجکت System.Type مربوط به اون رو در زمان کامپایل مشخص میکنه.
این سیستم بررسی نوع دو مرحلهای، یکی از دلایل اصلی قدرت و امنیت زبان #C هست.
🛡 بازرسی هویت در #C :
Type Checking در زمان کامپایل و اجرا
چطور #C جلوی خطاهای مربوط به نوع داده رو میگیره؟ این زبان از یه سیستم امنیتی دو لایه استفاده میکنه: بررسی استاتیک در زمان کامپایل و بررسی در زمان اجرا.
امروز میخوایم با این دو لایه امنیتی و ابزارهای بازرسیشون آشنا بشیم.
1️⃣ بررسی استاتیک (Static Type Checking): نگهبان زمان کامپایل 👮♂️
این اولین خط دفاعی شماست. کامپایلر #C قبل از اینکه حتی برنامه رو اجرا کنید، کد شما رو بررسی میکنه تا مطمئن بشه که شما نوعهای داده رو به درستی استفاده کردید. این کار جلوی یه عالمه باگ رو در نطفه خفه میکنه.
// کامپایلر اینجا جلوی شما رو میگیره و اجازه نمیده برنامه ساخته بشه
// چون نمیتونید یه رشته رو تو یه متغیر int بریزید.
int x = "5"; // ❌ خطای زمان کامپایل!
2️⃣ بررسی در زمان اجرا (Runtime Type Checking): نگهبان CLR 🏃♂️
بعضی وقتا کامپایلر نمیتونه از همه چیز مطمئن باشه (مثلاً موقع Downcasting). اینجا CLR (محیط اجرای داتنت) وارد عمل میشه.
هر آبجکتی که روی هیپ ساخته میشه، یه "توکن نوع" با خودش داره. CLR در زمان اجرا، از این توکن برای چک کردن صحت عملیات کستینگ استفاده میکنه.
object y = "5";
// در زمان اجرا، CLR میبینه که آبجکت داخل y یک string است، نه int
// و یک خطای InvalidCastException پرتاب میکنه.
int z = (int)y; // 💥 خطای زمان اجرا!
3️⃣ ابزارهای بازرسی: GetType در برابر typeof 🔎
برای اینکه خودمون اطلاعات یه نوع رو بدست بیاریم، دو تا ابزار اصلی داریم:
🔹️ GetType() (برای زمان اجرا):
این یه متده که روی یک نمونه (instance) از آبجکت صدا زده میشه و نوع دقیق اون آبجکت رو در زمان اجرا به ما میده.
🔹️ typeof (برای زمان کامپایل):
این یه اپراتوره که اسم یه نوع (Type) رو میگیره و آبجکت System.Type مربوط به اون رو در زمان کامپایل مشخص میکنه.
public class Point { public int X, Y; }
// ...
Point p = new Point();
// GetType روی نمونه کار میکنه
Console.WriteLine(p.GetType().Name); // خروجی: Point
// typeof روی خودِ نوع کار میکنه
Console.WriteLine(typeof(Point).Name); // خروجی: Point
// میتونیم نتایج رو با هم مقایسه کنیم
Console.WriteLine(p.GetType() == typeof(Point)); // خروجی: Trueاین سیستم بررسی نوع دو مرحلهای، یکی از دلایل اصلی قدرت و امنیت زبان #C هست.
🔖 هشتگها:
#DotNet #OOP #BestPractices #TypeSystem