我如何允许 child class 调用具有相同签名的多个基本构造函数之一?

How can I allow a child class to call one of multiple base constructors with the same signatures?

我在 C# 中有一个 parent class,其中包含多个构造函数。其中一些具有相同的签名,例如。

public MyClass()
{
    //Do something
}

public MyClass()
{
    //Do something else
}

如何让 child class 仅选择这些构造函数中的一个作为基础?

在 C# 中,不可能在单个 class 中有多个具有相同签名的构造函数。为什么不简单地实现多个受保护的方法——每个方法都有自己的特定名称,然后从子构造函数中调用所需的方法?像这样:

public class MyClass
{
    protected Foo()
    {
        // Do something
    }

    protected Bar()
    {
        // Do something else
    }
}

public class MyChildClass : MyClass
{
    public MyChildClass(int x)
    {
        if(x > 0)
        {
            Foo();
        }
        else
        {
            Bar();
        }
    }
}

更新

根据评论中提供的附加信息,我添加了一个可能更适合您的情况的解决方案:

public class MyGrandClass
{
    public MyGrandClass(string name)
    {
        // Do something with the name.
    }

    public MyGrandClass()
    {
        // Do something else.
    }
}

public class MyClass : MyGrandClass
{
    public MyClass(string name) : base(name)
    {
    }

    public MyClass()
    {
    }
}

public class MyChildClass : MyClass
{
    public MyChildClass(string name) : base(name)
    {
    }

    public MyChildClass()
    {
    }
}

虽然您不可能定义多个具有相同参数(或根本没有参数...)的构造函数,您可以定义一个具有可选参数的构造函数 :

public class A
{
    public A(string x = null, int y = -1)
    {
    }
}

public class B : A
{
    public B(string x) : base(x)
    {
    }
}

public class B2 : A
{
    public B(int y) : base(y)
    {
    }
}

// You can even inherit A and don't call the A's constructor
// because all parameters are optional
public class B3 : A
{
}