在C#多個構造函數,如果你有多個構造函數,你可以這樣做:複雜的邏輯
public MyClass(Guid inputId, string inputName){
// do something
}
public MyClass(Guid inputId): this(inputId, "foo") {}
的想法當然是代碼重用。然而,當需要一些複雜的邏輯時,最好的方法是什麼?說我想這個構造:
public MyClass(MyOtherClass inputObject)
{
Guid inputId = inputObject.ID;
MyThirdClass mc = inputObject.CreateHelper();
string inputText = mc.Text;
mc.Dispose();
// Need to call the main Constructor now with inputId and inputText
}
這裏需要說明的是,我需要創建一個對象,有被使用後丟棄。 (澄清:不是立即,但我必須調用Dispose()而不是等待垃圾收集)
但是,我沒有看到一種方法來再次調用基構造函數,如果我在我的重載構造函數中添加一些代碼。有沒有辦法從超載的內部調用基礎構造函數?
或者是有可能使用
public MyClass(MyOtherClass inputObject): this(inputObject.ID,
inputObject.CreateHelper().Text)
{}
這會自動從CreateHelper處置所產生的對象()?
編輯:感謝這麼遠。兩個問題:我不控制MyOtherClass,我沒有擴展方法(只有.NET 3.0 ...)。我這樣做,雖然控制我自己的類,並且因爲我剛開始寫它,我沒有問題,重構的構造函數,如果有一個很好的方法。
因爲他說*有*在使用後被處置掉,所以我把它當作「立即使用後」的意思,在這種情況下,使用塊將是必要的。 – 2008-09-20 23:18:36
這並沒有真正解決所提出的問題,即如何對參數執行邏輯操作,並仍然使用構造函數():this()模式進入另一個構造函數。確實是 – 2008-09-20 23:18:40
。對不起,如果我不清楚。我的問題是,我需要再次與我的基礎構造函數與數據,我必須處置mc,而不是等待垃圾收集。你和我的例子基本上是一樣的,使用和調用Dispose()顯式地使問題沒有區別。 – 2008-09-20 23:27:21