【发布时间】:2010-10-23 09:49:40
【问题描述】:
C# 4.0 引入了dynamic 关键字,它将在运行时查找。
这是否意味着我们不再需要尴尬的反思?如果有,你能举个例子吗?
【问题讨论】:
-
我第一次在 SO 上提问,5 分钟后没有答案!
标签: c# dynamic reflection runtime
C# 4.0 引入了dynamic 关键字,它将在运行时查找。
这是否意味着我们不再需要尴尬的反思?如果有,你能举个例子吗?
【问题讨论】:
标签: c# dynamic reflection runtime
Dynamic 将大大有助于解决仅通过名称知道的方法的问题,其中名称是已知的并在编译时固定 - 当然,如果您控制类型,这些方法也可以表示为接口。
在某些情况下dynamic 根本无济于事:
我看到dynamic 的最大用途是:
但它绝对不能解决所有反射问题。
【讨论】:
我们仍然会有反射 - 对常规 CLR 对象使用“动态”将调用基于反射的调度程序。
所以 - 我们仍然有反射,但它会更容易做到。
这是一个例子:
// 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);
我不了解你,但我喜欢前者。 =)
在这两种情况下,我都没有得到编译时检查,没有 Intellisense,没有 IDE 支持 - 但前一种情况比后者更具表现力。
【讨论】:
动态调度只是反射的一种可能用途。有很多很好的理由来询问一个类的结构,获取有关该结构的信息并以某种形式可视化或以某种方式对其进行操作,而无需动态访问成员。反思在这里停留。 :)
如果您想要动态关键字的示例,the man himself 中的here is a video from PDC 正在谈论它(以及其他与 C# 4.0 相关的内容)。
【讨论】: