有动态,尴尬的反思不再?

Vim*_*987 3 c# reflection runtime dynamic

C#4.0引入了dynamic关键字,它将在运行时查找.

这是否意味着我们不再需要尴尬的反思?如果可以的话,你能举例说明吗?

Eri*_*bes 6

我们仍然会有反射 - 对常规CLR对象使用'dynamic'将调用基于反射的调度程序.

所以 - 我们仍然会有反思,但这样做会更容易.

这是一个例子:

// Via 'dynamic'    
dynamic dx = GetSomeCLRObject();
dx.DoSomething();
dx.SomeMember = 2;

// Via Reflection
object x = GetSomeCLRObject();
Type xt = x.GetType();
MemberInfo DoSomethingMethod = xt.GetMethod("DoSomething");
DoSomethingMethod.Invoke(x, null);
PropertyInfo SomeMemberProperty = xt.GetProperty("SomeMember");
SomeMemberProperty.SetValue(x, 2);
Run Code Online (Sandbox Code Playgroud)

我不了解你,但我喜欢前者.=)

在这两种情况下,我都没有编译时检查,没有Intellisense,没有IDE支持 - 但前一种情况比后者更具表现力.