2010-09-02 250 views
2

我目前重建我的程序更面向對象,我遇到了我的對象的構造函數的麻煩。C#構造函數參數傳遞

所有對象都存儲在一個必須是人類可讀的數據庫中,所以我認爲程序員直接將對象的構造函數直接傳遞給表或數據行,並且對象會自己獲取值。

所以,我想要做的是這樣的:

public TestObject(Data.MyDataTable table) { 
// Some checks if the table is valid 
TestObject(table[0]); 
} 

public TestObject(Data.MyDataRow row) { 
// Some checks if the row is valid 
TestObject(row.Name, row.Value); 
} 

public TestObject(String name, String value) { 
// Some checks if the strings are valid 
_name = name; 
_value = value; 
} 

所以,你看,我想那種,這取決於程序員如何調用它的值傳遞一個「構造函數鏈」通過並在每一步中進行驗證。我按照我寫的方式嘗試了它,但沒有奏效。

Error 'TestObject' is a 'type' but is used like a 'variable' 

我也試過寫this.TestObject(...)但沒有變化。

Error 'TestObject' does not contain a definition for 'TestObject' and 
no extension method 'TestObject' accepting a first argument of type 
'TestObject' could be found 

我該怎麼辦?

+1

「它沒有工作」。什麼沒有用?有什麼問題? – Oded 2010-09-02 06:54:44

+0

@Oded:異常消息清楚地說明了,從代碼中很容易看出問題所在...... – gehho 2010-09-02 07:27:40

+0

@gehho在他提問後我添加了異常。沒有責任;) – 2010-09-02 07:29:12

回答

2

Constructor chaining作品那樣:

public TestObject(Data.MyDataTable table) : this(table[0]) 
{ 

} 

public TestObject(Data.MyDataRow row) : this(row.Name, row.Value) 
{ 

} 

public TestObject(String name, String value) 
{ 
// Some checks if the strings are valid 
_name = name; 
_value = value; 
} 
+2

@ ApoY2K - 構建TestObject對象時可以捕獲異常。 – Oded 2010-09-02 06:59:49

+1

你也可以這樣做,以避免'null'或空參數拋出異常:'public TestObject(Data.MyDataTable table):this((table!= null && table.Rows.Count> 0)?table [0 ]:null)' – gehho 2010-09-02 07:34:06

7

chain constructors這樣的:

public TestObject(Data.MyDataTable table) : this(table[0]) 
{ 

} 

public TestObject(Data.MyDataRow row) : this(row.Name, row.Value) 
{ 

} 

public TestObject(String name, String value) 
{ 
// Some checks if the strings are valid 
_name = name; 
_value = value; 
} 

注:使用this關鍵字來表示當前的對象,使用在傳遞的參數到一個構造函數鏈接構造函數。