簡體   English   中英

Activator.CreateInstance() 的用法

[英]Usage of Activator.CreateInstance()

以下兩個代碼片段之間實際上有什么區別?

Object o = Activator.CreateInstance(typeof(StringBuilder));

StringBuilder sb = (StringBuilder) o;

StringBuilder sb = new StringBuilder();

從實用的角度來看。 沒有區別。

但是,從技術角度來看。 第一個將導致嚴重的性能損失。

首先,來自Activator.CreateInstance ,因為這是一個反射調用。

然后,當您將objectStringBuilder時,另一個性能受到影響。

然而,從設計的角度來看。 Activator.CreateInstanceType作為參數...

這意味着您可以執行以下操作...

public IStringBuilder ActivateStringBuilder(Type builderType)
{
     return (IStringBuilder) Activator.CreateInstance(builderType);
}

忽略沒有IStringBuilder之類的東西,上面的代碼允許您在運行時通過傳入實現IStringBuilder的不同Type來更改代碼的行為。

這是依賴注入的基礎(盡管我們傾向於使用更復雜的機制來解決我指出的性能問題)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM