【发布时间】:2013-09-19 22:27:04
【问题描述】:
我听说使用反射创建实例的最佳做法是使用动态类型变量。
这意味着当我们使用Activator.CreateInstance() 方法(返回对象)时,我们将其分配给动态类型而不是对象类型:
dynamic dog = Activator.CreateInstance("Zoo.Dog");
dog.Bark();
代替:
object dog = Activator.CreateInstance("Zoo.Dog");
Dog realDog = (Dog)dog;
realDog.Bark();
除了没有强制转换之外,还有什么好的理由使用动态?
【问题讨论】:
-
请添加语言标签。
-
dynamic旨在实现与脚本语言的互操作性,或与其他类型的不具有通用静态类型的对象一起使用。 (ASP.NET MVCViewBag、ExpandoObject等等。)此外,“缺少强制转换”并不能真正准确地描述它是如何工作的——动态方法调用/表达式的处理方式与静态方法调用/表达式的处理方式完全不同。 -
我知道什么是动态。我的问题是为什么我上面显示的示例在使用反射创建实例时被认为是最佳实践
-
是它真的是最佳实践吗?我的意思是,如果您应该只知道要在运行时实例化的类(因为您无法在编译时知道正确的类型),那么它在某种程度上是唯一优雅的选择。如果我在设计时知道类型,我总是更喜欢静态类型 - 没有一个缺点......
标签: c#-4.0 dynamic reflection