PDA

View Full Version : سوال: کلاس Dynamic?



saeedgharedaghi
شنبه 10 اردیبهشت 1390, 22:50 عصر
سلام خدمت اعضای محترم سابت


در کد زیر نوع dynamic به چه درد میخوره و کجا ها از این کلاس استفاده میشود؟






dynamic d= new Person {FirstName="saeed",Age=20};
Console.WriteLine("{0}, {1}",d.FirstName,d.Age};

mehdi.mousavi
شنبه 10 اردیبهشت 1390, 23:53 عصر
سلام.
در کدی که شما نوشته اید و بهش اشاره کردید، استفاده از dynamic صحیح نیست چون کلاس Person شما، statically typed هستش. مثال زیر رو در نظر بگیرید:


public void Test(dynamic d)
{
d.Test();
}

این کد رو در VS2010 بنویسید و Compile کنید. با کمال تعجب خواهید دید که برنامه Compile میشه، بدون اینکه متود Test وجود داشته باشه یا Compiler بدونه که تایپ d چی هستش. در حقیقت اینجا، جای اینکه Compiler کد IL ای رو emit کنه که بگه متود Test رو باید روی فلان Object فراخوانی کنی، Compiler یه Dynamic Call Site رو emit میکنه. یعنی چی؟ یعنی در Runtime و هنگام اجرای متود فوق، خودش میره تشخیص میده تایپ d چی هستش و آیا متود Test با Signature داده شده روی اون تعریف شده یا خیر. اگر وجود داشته باشه، اونو Call میکنه. در غیر اینصورت با پیام خطا مواجه میشیم... (البته من بیش از حد سناریو رو ساده توضیح دادم، اما در واقعیت، این عملیات توسط DLR و C# Runtime binder بصورت توام انجام میشه، ضمن اینکه بسته به تایپ d، بهترین راه فراخوانی اون متود رو تشخیص میده و ...)

لطفا برای اطلاعات بیشتر، این ویدئو (http://channel9.msdn.com/posts/matthijs/C-40-and-beyond-by-Anders-Hejlsberg/) رو مشاهده کنید. این پست (http://blogs.msdn.com/b/cburrows/archive/2008/10/27/c-dynamic.aspx) نیز می تونه اطلاعات خوبی بهتون بده.

موفق باشید.

amir-yeketaz
یک شنبه 11 اردیبهشت 1390, 01:07 صبح
برای این کار شما بهتره که از همون نوع خود Person استفاده کنید!!! ... حالا یه مرحله بالاتر اگه Anonymous Type خواستین بازم از var استفاده میکنید! ‍‍پس کار شما طبق گفته دقیق استاد موسوی صحیح نمیباشد!