c# - 为什么我们不能在派生类中使用带参数的构造函数

标签 c# generics parameters constructor derived-class

为什么这不可能? 使用构造函数参数实例化“DerivedClass”时出现以下编译器错误:

“GenericParameterizedConstructor.DerivedClass”不包含采用 1 个参数的构造函数

但是调用一个非常相似的方法是可行的。

为什么?

class Program
{
    static void Main(string[] args)
    {
        // This one produces a compile error 
        // DerivedClass cls = new DerivedClass("Some value");

        // This one works;
        DerivedClass cls2 = new DerivedClass();
        cls2.SomeMethod("Some value");
    }
}


public class BaseClass<T>
{
    internal T Value;

    public BaseClass()
    {
    }

    public BaseClass(T value)
    {
        this.Value = value;
    }

    public void SomeMethod(T value)
    {
        this.Value = value;
    }
}

public class DerivedClass : BaseClass<String>
{
}

最佳答案

构造函数不是继承的——就这么简单。 DerivedClass 包含一个构造函数 - 编译器默认提供的公共(public)无参数构造函数,因为您没有指定任何构造函数。

请注意,这与泛型无关。如果 BaseClass 不是通用的,您会看到同样的事情。

DerivedClass 提供构造函数很容易:

public class DerivedClass : BaseClass<String>
{
    public DerivedClass() : base()
    {
    }

    public DerivedClass(string value) : base(value)
    {
    }
}

关于c# - 为什么我们不能在派生类中使用带参数的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12167234/

相关文章:

c# - .NET 安装程序包安装程序

c# - 如何在执行时获取自定义属性附加到的函数/操作名称?

c# - 缺少必需的参数 '<PROVIDER>'。 ASP.NET Core 2.1.MAC中的Scaffold Dbcontext

c# - 将枚举作为参数传递

powershell - 输出PSBound参数

c# - 来自输入的字符串未转换(格式错误)

java - 使用与封闭类具有相同泛型类型的静态嵌套类

c# - 实现通用接口(interface)

java - 创建给定类的实例

javascript - 在 for 循环中错误地传递回调参数