#csharp_for_beginners
نوع dynamic یک نوع static است اما وقتی متغیری از نوع dynamic باشد کنترل نوع کامپایلر نادیده گرفته میشود. یعنی معمولاً مانند نوع object رفتار میکند اما کامپایلر فرض میکند که هر عملی روی آن امکانپذیر است بدون اینکه نوع دقیق آن را بداند.
نتیجه این کار این است که وقتی با dynamic کار میکنید لازم نیست بدانید مقدار آن دقیقاً از کجا آمده مثلا از COM API یا یک زبان دینامیک یا از DOM HTML یا بازتاب (reflection).
اگر کد شما نادرست باشد خطا در زمان اجرا ظاهر میشود نه زمان کامپایل
مثال:
class ExampleClass
{
public void exampleMethod1(int i) { }
public void exampleMethod2(string str) { }
}
static void Main(string[] args)
{
ExampleClass ec = new ExampleClass()
dynamic dynamic_ec = new ExampleClass()
dynamic_ec.exampleMethod1(10, 4)
dynamic_ec.someMethod("some argument", 7, null)
dynamic_ec.nonexistentMethod()
}
نتیجه عمل روی متغیر dynamic
بیشتر عملیات روی dynamic باز هم نتیجهای از نوع dynamic میدهند مثلا
dynamic d = 1
var testSum = d + 3
در اینجا testSum خودش dynamic خواهد بود، اما بعضی از عملیاتها نتیجهای غیر dynamic دارند مثل تبدیل به نوع خاص یا ساخت شی با آرگومانهای dynamic.
var testInstance = new ExampleClass(d)
در اینجا نوع testInstance برابر ExampleClass خواهد بود نه dynamic
کاربردها
داینامیک زمانی مفید است که بخواهید دیر-بایندینگ (late binding) داشته باشید یعنی تصمیمگیری نوع و فراخوانی متدها یا پراپرتیها در زمان اجرا انجام شود نه کامپایل.
برای Interop یا COM زمانی که با APIهای COM کار میکنید dynamic دیگر لازم نیست هر بار casting انجام دهید.
برای زبانهای دینامیک یا DOM یا reflection وقتی ساختار داده یا API تان در زمان اجرا معلوم میشود dynamic انعطاف بیشتری میدهد.
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______