我知道在继承类时,您也可以继承Constructors
示例:
class Book : Genre
{
Book(string param1, int param2, string inherit1, string inherit2) : Base(inherit1,inherit2)
{
Prop1 = param1
Prop2 = param2
}
}
但是通过继承类中的构造函数设置继承的属性不是更容易。而不是引用基础构造函数?
class Book : Genre
{
Book(string param1, int param2, string inherit1, string inherit2)
{
Prop1 = param1
Prop2 = param2
InhProp3 = inherit1
InhProp4 = inherit2
}
}
答案 0 :(得分:4)
当您使用带参数的基类构造函数时,基类可以设置这些属性,并且可能具有基于这些参数的自定义行为,这些行为在子类构造函数之前运行。
如果在子类构造函数中手动设置属性,则基类构造函数已经运行。这可能会改变行为 - 有时候会显着改变(特别是如果基类的设计很差)。
此外,如果基类需要该信息才能构建自身,那么您别无选择。通常,构造函数参数不仅仅是设置类的属性 - 它们对于构造对象本身至关重要。
答案 1 :(得分:3)
如果某个时间点的基类经过重新设计,做的事情比设置成员更复杂,那么你很乐意调用它。
如果没有,你会找到一个错误,经过几个小时的调试后找到它。然后你永远不会忘记再次将调用委托给基类的构造函数: - )
答案 2 :(得分:1)
基类可能不仅仅是设置属性。基类可以是一个你没有源代码的类,所以你甚至不知道它对它的作用。
答案 3 :(得分:1)
基础构造函数可能不仅仅是设置属性,它可能例如检查空引用。如果你在继承类中这样做,那么你需要重复所有的代码。然后你会在两个地方拥有相同的代码,所以如果代码必须改变,你必须知道它需要在两个地方都有所改变。
答案 4 :(得分:1)
取决于课程的设计方式。
可能属性为public get; private set;
在这种情况下,派生类无权设置属性。
另外,iirc,调用构造函数来设置参数,生成的IL少于设置构造函数体中的值。