2011-09-22 20 views
1

我維護別人的代碼,他們有這個節的方法:對Activator.CreateInstance進行此調用的任何原因?

object ReportCriteriaInstance = 
     Activator.CreateInstance(
       typeof(MyCompany.Utils.ReportStructure.ReportSearchCriteria)); 

//ReportCriteria is passed in as a method parameter 
ReportCriteriaInstance = ReportCriteria; 

我不知道爲什麼他們正在與CreateInstance()實例之後設置ReportCriteriaInstace爲不同的值一行。

除此之外, ,因爲我們正在傳遞一個已知類型爲CreateInstanceMyCompany.Utils.ReportStructure.ReportSearchCriteria)是否有任何理由不使用new()來代替?一些默認的,無參數的構造函數原因我沒有得到可能嗎?

+0

我能想到的唯一理由是,如果組件動態加載,因此你沒有名字在編譯時。 – kenny

+2

在該行之前放置一個//並繼續您的生活。有一天你可能會找出原因。 –

+0

@Hans Passant:直到證明 –

回答

2

這似乎是一個放棄努力實施窮人的DI容器。稍後,對象剛剛傳入,因此可以安全地刪除代碼(除非存在具有一些潛在副作用的默認構造函數ReportSearchCriteria)。

+0

才能保存看起來在ReportSearchCriteria類中存在副作用 –

1

您可以輕鬆地轉換代碼以下,完全避免了重構的副作用:

var ReportSearchCriteriaInstance = new MyCompany.Utils.ReportStructure.ReportSearchCriteria(); 
object ReportCriteriaInstance = ReportCriteria; 
相關問題