Soheib Papi
Soheib Papi
خواندن ۲ دقیقه·۴ ماه پیش

تفاوت بین dynamic و ExpandoObject در سی‌شارپ

هر دو برای مدیریت پویا در سی‌شارپ استفاده می‌شن، اما از نظر کاربرد و عملکرد تفاوت‌های مهمی دارن:

نوع dynamic چیست؟

  • ماهیت: dynamic یک نوع خاصه که به کامپایلر می‌گه بررسی نوع و اعضا رو به زمان اجرا (runtime) موکول کن.
  • انعطاف: می‌تونی متغیرهایی از هر نوع (مقداری یا مرجع) بهش تخصیص بدی و در زمان اجرا نوعش تغییر کنه.
  • اعضا: هر چیزی که متغیر بهش اشاره کنه، اعضای اون نوع قابل دسترسیه (یعنی اگر متغیر مقدار رشته ای داشته باشه، تمام متدهای رشته رو میشه براش استفاده کرد مثلا ToUpper). اما خود dynamic نمی‌تونه اعضای جدید (پراپرتی و متد) اضافه کنه.

نوع ExpandoObject چیست؟

  • ماهیت: ExpandoObject بخشی از فضای نام System.Dynamic است و بهت اجازه می‌ده اعضای جدید (property یا method) رو در زمان اجرا به یک شیء اضافه کنی.
  • انعطاف: بیشتر شبیه به یک شیء پویا (dynamic object) در زبان‌های پویا مثل Python یا JavaScript عمل می‌کنه.
  • اعضا: می‌تونی به صورت پویا اعضای جدید (property یا method) به یک شیء اضافه کنی یا اعضای موجود رو حذف کنی.

مثال: dynamic

dynamic obj = &quotHello, World!&quot Console.WriteLine(obj.Length); // 13 obj = 123; Console.WriteLine(obj + 10); // 133
  • نمی‌تونی مستقیماً یک property جدید اضافه کنی:
obj.NewProperty = &quotTest&quot // زمان اجرا خطا می‌ده

مثال: ExpandoObject

using System.Dynamic; dynamic expando = new ExpandoObject(); expando.Name = &quotJohn&quot // اضافه کردن یک property expando.Age = 30; // اضافه کردن یک property جدید Console.WriteLine($&quot{expando.Name}, {expando.Age}&quot); // John, 30

اضافه کردن متد:

expando.Greet = (Action)(() => Console.WriteLine($&quotHello {expando.Name}!&quot)); expando.Greet(); // Hello John!

چه زمانی از هرکدام استفاده کنیم؟

نوع dynamic:

  • وقتی نوع داده یا رفتار متغیر از قبل مشخص نیست و فقط در زمان اجرا می‌تونی تصمیم بگیری.
  • مثال: دریافت داده از یک API یا JSON.

نوع ExpandoObject:

  • وقتی نیاز داری یک شیء پویا با اعضای دلخواه در زمان اجرا بسازی و اون رو مدیریت کنی.
  • مثال: ساختن یک مدل پویا برای داده‌هایی که ساختار ثابت ندارن.
  • جمع‌بندی:
  • نوع dynamic: ابزاریه که بهت اجازه می‌ده رفتار شیء رو در زمان اجرا مدیریت کنی، ولی نمی‌تونی مستقیماً عضو جدید اضافه یا حذف کنی.
  • نوع ExpandoObject: یه شیء پویا واقعی که می‌تونی بهش property و متد جدید اضافه کنی.
dynamicپویاamp quot
یک برنامه نویس علاقه مند به یادگیری.
شاید از این پست‌ها خوشتان بیاید