我听说使用反射创建实例的最佳做法是使用动态类型变量。这意味着当我们使用Activator.CreateInstance()
方法(返回对象)时,我们将其分配给动态类型而不是对象类型:
dynamic dog = Activator.CreateInstance("Zoo.Dog");
dog.Bark();
代替:
object dog = Activator.CreateInstance("Zoo.Dog");
Dog realDog = (Dog)dog;
realDog.Bark();
除了缺少强制转换之外,还有什么好的理由使用动态?