我目前正在重构我的程序,使其更加面向对象,而且我的对象的构造函数也遇到了问题。
所有对象都存储在一个必须是人类可读的数据库中,所以我认为程序员直接传递一个对象的构造函数或者对象将自己获取值是很好的。 / p>
所以,我想做的是:
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
我该如何解决这个问题?
答案 0 :(得分: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
关键字来指示当前对象,使用传递给一个构造函数的参数到链式构造函数。
答案 1 :(得分: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;
}