[英]Usage of Activator.CreateInstance()
以下两个代码片段之间实际上有什么区别?
Object o = Activator.CreateInstance(typeof(StringBuilder));
StringBuilder sb = (StringBuilder) o;
和
StringBuilder sb = new StringBuilder();
从实用的角度来看。 没有区别。
但是,从技术角度来看。 第一个将导致严重的性能损失。
首先,来自Activator.CreateInstance
,因为这是一个反射调用。
然后,当您将object
为StringBuilder
时,另一个性能受到影响。
然而,从设计的角度来看。 Activator.CreateInstance
将Type
作为参数...
这意味着您可以执行以下操作...
public IStringBuilder ActivateStringBuilder(Type builderType)
{
return (IStringBuilder) Activator.CreateInstance(builderType);
}
忽略没有IStringBuilder
之类的东西,上面的代码允许您在运行时通过传入实现IStringBuilder
的不同Type
来更改代码的行为。
这是依赖注入的基础(尽管我们倾向于使用更复杂的机制来解决我指出的性能问题)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.