[英]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.