TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 548 subscribers
Post #241 100
📖 سری آموزشی کتاب C# 12 in a Nutshell

🛡 بازرسی هویت در #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
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →