C# 隐式调用父构造函数

C# 隐式调用父构造函数,c#,C#,我有一组类,其中我的基类有一个构造函数,该构造函数接受配置对象并处理将值传输到其属性的过程 abstract class A { public A(ObjType MyObj){} } abstract class B : A {} class C : A {} class D : B {} class E : B {} 是否可以从子类隐式调用非默认基构造函数,或者我是否需要显式实现链上的签名才能通过构造函数实现 abstract class A { public A(ObjType MyO

我有一组类,其中我的基类有一个构造函数,该构造函数接受配置对象并处理将值传输到其属性的过程

abstract class A { public A(ObjType MyObj){} } 
abstract class B : A {}
class C : A {}
class D : B {}
class E : B {}
是否可以从子类隐式调用非默认基构造函数,或者我是否需要显式实现链上的签名才能通过构造函数实现

abstract class A { public A(ObjType MyObj){} } 
abstract class B : A { public A(ObjType MyObj) : base(MyObj){} }
class C : A { public A(ObjType MyObj) : base(MyObj){} }
class D : B { public A(ObjType MyObj) : base(MyObj){} }
class E : B { public A(ObjType MyObj) : base(MyObj){} }
如果是这样的话,是否最好只在基础中实现一个方法,然后让我的工厂在创建对象后立即调用该方法?

?不,构造函数不是继承的。您的类可以显式调用其父类的构造函数。但是,如果您希望您的类具有与父类相同的构造函数签名,则必须实现它们

例如:

public class A
{
    public A(int someNumber)
    {
    }
}

// This will not compile becase A doesn't have a default constructor and B 
// doesn't inherit A's constructors.
public class B : A
{
}
要实现这一点,您必须显式声明您希望B拥有的构造函数,并让它们显式调用A的构造函数(当然,除非A有默认构造函数)


不,隐式调用非默认基构造函数是不可能的,您必须使其显式化。

您需要显式地实现它。另外,重要的是,在您的原始代码中,您将无法调用
new B()
,因为
a
没有默认构造函数,而
B
也不会调用
a
有arg的构造函数。

这正是我(适度地)担心的。我想我会选择助手方法路线。谢谢感谢和抱歉,为了简洁起见,我们省略了默认构造函数。
public class B : A
{
    public B(int someNumber) : base(someNumber)
    {
    }
}