konto usunięte
Temat: dynamic w 4.0 - wcale nie taki zły
Jak pierwszy raz usłyszałem o dynamic to mnie zmroziło, że z porządnego języka C# staje się językiem skryptowym i obiecałem sobie, że z dynamic nigdy nie skorzystam.Ale właśnie znalazłem dobrą stronę - zakładając, że przez reflection chcemy odpalić jakąś metodę (znamy nazwę w design-time), to skorzystanie z dynamic raz, że uprości kod źródłowy a dwa, pominie e/w TargetInvocationException i uczciwie wyrzuci ten błąd, który napotka w wywoływanej metodzie.
Niby szczegół, ale w podanej sytuacji na dynamic jednak się skuszę:
using System;
using System.Reflection;
static class Program {
static void Main(string[] args) {
var someObj = new SomeObj();
//callSomeMethodReflection(someObj,0);
callSomeMethodDynamic(someObj,0);
}
static int callSomeMethodReflection(object o,int arg) {
MethodInfo mi = o.GetType().GetMethod("SomeMethod",BindingFlags.NonPublic | BindingFlags.Instance);
return (int)mi.Invoke(o,new object[] { arg });
}
static int callSomeMethodDynamic(dynamic o,int arg) {
return o.SomeMethod(arg);
}
}
internal sealed class SomeObj {
internal int SomeMethod(int a) {
throw new NotImplementedException("Nie gotowe");
}
}