چرا سیشارپ این همه نوع داده دارد؟
برای اینکه هر کدام برای یک کار خاص ساخته شدهاند. نه مسخرهبازی است، نه اضافی!
جدول تفاوت var، object و dynamic
| نوع داده | زمان تشخیص خطا | کی استفاده کنیم؟ |
|---|---|---|
var |
زمان کامپایل | وقتی نوع رو میدونیم ولی نوشتن اسمش طولانیه (مثل LINQ) |
object |
زمان کامپایل | وقتی میخوایم هر چیزی رو توی یه متغیر بریزیم (با سربار تبدیل) |
dynamic |
زمان اجرا | وقتی با دادههای متغیر کار میکنیم (مثل JSON یا Python) |
مثال ساده با omg()
dynamic x = 10;
object y = 10;
x.omg(); // ❌ خطا در زمان اجرا (برنامه کرش میکنه)
y.omg(); // ❌ خطا در زمان کامپایل (اجازه اجرا نمیده)
dynamic: تا اجرا صبر میکنه، بعد میگهintاین متد رو نداره.object: همین الان کامپایلر خطا میده و نمیذاره برنامت ساخته بشه.
کی از کدوم استفاده کنیم؟
| موقعیت | انتخاب |
|---|---|
| مطمئنی نوع چیه؟ | var |
| هر چیزی رو میخوای نگه داری؟ | object |
| با دیتای نامشخص کار داری؟ | dynamic |
خلاصهتر:
var = راحتنویسی
object = جعبهی همهچیز
dynamic = انعطافپذیری با هزینه خطا در اجرا