2012-09-28 55 views
4

有沒有辦法爲給定程序集中的所有類定義默認構造函數。例如,我有類這樣在裝配 -定義程序集中現有類的默認構造函數

public class SomeClass 
{ 
    public SomeClass(int x, int y) 
    { 
    } 
} 

這些類都需要一個默認的構造函數,但我不希望有一個默認的構造函數來謎語所有這些類的讓我怎麼做到這一點使用反射或類似的東西? (也許TypeBuilder.DefineDefaultConstructor?)

回答

3

這些類都需要一個默認的構造函數,但我不希望有謎語所有這些類的一個默認的構造函數

如果類需要一個構造函數,你應該包括它。其他任何事情都將成爲維護方面的噩夢。

與生成自動構造的主要問題是,默認的構造函數需要了解有關的類,因爲它需要正確初始化類的值。在你的榜樣,你的默認構造函數需要做的事情設置通常與xy創建的內部狀態。如果沒有關於班級的知識,沒有辦法知道什麼應該是什麼,所以班級應該在哪裏定義應該

話雖這麼說,沒有,只是「構造函數添加到每個類型爲」直接的方式。你可能會使用像Cecil這樣的工具來修改程序集 - 基本上,加載程序集,檢查每種類型,添加新信息並重寫它。或者,您可以使用某種形式的AOP工具(如PostSharp)在編譯時根據某些屬性或類似屬性創建構造函數。

我會建議對這些方法,但是。我認爲修改代碼本身並在適當時包括構造函數是正確的方法。

0

你不能在運行時改變編譯類添加默認構造函數。

你可以在編譯時使用面向方面的編程做到這一點。檢出PostSharp