بازم سلام
بی مقدمه ادامه میدم
dynamic r = 5;
var t =M( r);
Console.WriteLine(t.
اگه اینجا دیگه IntelliSense کار نمی کنه چون نوع t هم داینامیک هستش ،در زمان اجرا معلوم می شه نوع t چی هستش و کدوم M اجرا می شه
نکته: اگه M نوع برگشتیش void بود هیچ exception رخ نمی ده عوضش null بر می گرده
مهم : var رو با dynamic قاطی نکنید
var در متغیر های محلی استفاده می شه برای کوتاه کردن code هستش و کامپایلر نوع رو از عبارت تشخیص می ده
var فقط به عنوان local variable استفاده میشه در شما نمی تونین چیزی cast کنید به var ولی به dynamic میشه
یه فرق دیگه اینکه شما در هنگام تعریف متغییر از نوع var حتما" باید مقدار دهیش کنید در صورتی که در dynamic نیازی نیست
اگه این کار رو نکنید این خطا رو می گیره
Implicitly-typed local variables must be initialized
با توجه به
dynamic d = 123;
var x = (Int32) d; // Conversion: 'var x' is the same as 'Int32 x'
var dt = new DateTime(d); // Construction: 'var dt' is the same as 'DateTime dt'
نوع x از داینامیک به static تبدیل می شه یعنی همون int32
و dt هم همین جور
یه سری مطلب دیگه هم هست در مورد dynamifcation و استفاده از dynamic ها به جای reflection برای اسان سازی کد نوشتن که فقط مثال می زنم
که دیگه حوصلم نمی یاد توضیح بدم (اگه کسی خواست بگه بنویسم)
مثال dynamifcation
public static void Main() {
Application excel = new Application();
excel.Visible = true;
excel.Workbooks.Add(Type.Missing);
((Range)excel.Cells[1, 1]).Value = "Text in cell A1";
}
با dynamifcation
public static void Main() {
Application excel = new Application();
excel.Visible = true;
excel.Workbooks.Add(Type.Missing);
excel.Cells[1, 1].Value = "Text in cell A1";
}
مثال 2
Object target = "Jeffrey Richter";
Object arg = "ff";
// Find a method on the target that matches the desired argument types
Type[] argTypes = newType[] { arg.GetType() };
MethodInfo method = target.GetType().GetMethod("Contains", argTypes);
// Invoke the method on the target passing the desired arguments
Object[] arguments = newObject[] { arg };
Boolean result = Convert.ToBoolean(method.Invoke(target, arguments));
با dynamic دیگه نیازی به این همه کار نیست
dynamic target = "Jeffrey Richter";
dynamic arg = "ff";
Boolean result = target.Contains(arg);