2010-11-04 26 views
2

從這個線程:http://geekswithblogs.net/kaju/archive/2005/12/05/62266.aspx有人問(在評論)這個問題:連鎖建設者 - 使用中間邏輯

有沒有辦法做這樣的事情 這樣:

public FooBar(string fooBar) 
{ 
string[] s = fooBar.split(new char[] { ':' }); 
this(s[0], s[1]); 
} 

public Foo(string foo, string bar) 
{ 
... 
} 

那麼,我遇到了我需要同樣的事情的情況。它有可能嗎?提前致謝。

編輯

我的意思是這

public Foo(string fooBar) 
{ 
string[] s = fooBar.split(new char[] { ':' }); 
this(s[0], s[1]); 
} 

public Foo(string foo, string bar) 
{ 
... 
} 

富是一個構造函數。

我的問題是我必須做大量的邏輯 - 調用其它構造函數之前 - 包括一些IO的東西。

+0

你能澄清這個問題嗎? Foo和FooBar應該是構造函數嗎?因爲它們的命名不同,所以它不完全清楚你想要做什麼...或者Foo應該被稱爲FooBar,或者Foo應該是一種方法,我猜? – 2010-11-04 15:02:04

+0

@ jamietre - 是的,我試圖澄清。謝謝。 – Moberg 2010-11-04 15:09:34

回答

14

不是直接的,而是:

public FooBar(string fooBar) 
    : this(fooBar.Split(new char[] { ':' })) 
{ 
} 

private FooBar(string[] s) 
    : this(s[0], s[1]) 
{ 
} 

public FooBar(string foo, string bar) 
{ 
... 
} 
+1

+1和使用'fooBar.Split( ':')',而不是直接的'新的char [] { ':'}' – 2010-11-04 15:09:48

+1

+1,但OP應該知道,'無功富=新的FooBar的( 「嗨!」) ;'會導致IndexOutOfRangeException。 – 2010-11-04 15:25:16

+1

+1空fooBar也會很討厭 – 2010-11-04 15:33:51

1

至於你提到,你可能需要做「一些IO的東西 - 調用其它構造函數之前。」也許你想要一個靜態創建方法?

public static FooBar LoadFromFile(string fileName) 
{ 
    var foo = "Default"; 
    var bar = "Other Default"; 
    // load from the file, do a bunch of logic, 

    return new FooBar(foo, bar); 
} 
+0

嗨麥凱。事實上,我最終以私有靜態方法來處理它 - 處理異常 - 正如你所建議的那樣。自從我要求 - 而且主要是討好 - 構造函數問題以來,我對Tim Robinson的答案進行了處理,但感謝您的意見:) – Moberg 2010-11-05 13:52:40