2010-09-02 283 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关键字来表示当前的对象,使用在传递的参数到一个构造函数链接构造函数。

相关问题