public class abc
{
public abc():this(new pqr())
{}
}
上面的代码表示构造函数abc()由某个类继承。
上述代码是什么意思?
何时使用此类代码?
为何使用它?
答案 0 :(得分:5)
上面的代码表示构造函数abc()由某个类继承。
不,不。
这意味着无参数abc
构造函数链接到abc
构造函数的pqr
。
所以你真的有:
public class Foo
{
public Foo() : this(new Bar())
{
}
public Foo(Bar bar) // implicit call to parameterless base constructor
{
// Do something with bar here
}
}
有关详细信息,请参阅我的article on constructor chaining。
至于你什么时候想要这样做 - 这真是太宽泛了。但作为一个例子,假设你有TimeOfDay
类型 - 你可能想要构造函数:
public TimeOfDay(int hour, int minute)
public TimeOfDay(int hour, int minute, int second)
public TimeOfDay(int hour, int minute, int second, int millisecond)
答案 1 :(得分:1)
public abc():this(new pqr())
此行表示在相同类中有另一个带参数的构造函数。当您在代码中调用new abc()
时,实际上会调用构造函数new abc(var param)
并为其指定一定值(此处为new pqr()
)。
答案 2 :(得分:1)
您的代码是构造函数链的(未完成的)示例:
public class abc {
// To finish the example, you have to add one constructor more:
// You can omit ": base()" here,
// base class constructor will be called by default
public abc(pqr value): base() {...}
// Explicit chain: when initializing like that "new abc()"
// call constructor above "abc(pqr value)"
// with "new pqr()" value
public abc(): this(new pqr()) {}
}
您不能继承构造函数,而是类,例如:
public class a {
public a(int value) {...}
}
public class b: a {
// b doesn't inherit any "a" constructors,
// (you can't call "b(1)" unless you provide "public b(int value)" constructor)
// but can call base class constructor if required
public b(): base(0) {...}
}
答案 3 :(得分:0)
构造函数不能inherit
但class
可以。
上面的代码调用的是类abc
的另一个构造函数,它接受一个新的pqr
对象。
此外,它还用于重用带有pqr
对象的构造函数中的代码。