如果我指定基类,为什么我不能用泛型调用参数化构造函数

Ign*_*cia 2 .net c# generics constructor compiler-errors

如果有以下课程:

class A
{
    public A(int number)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

那么为什么我不能拥有像这样的泛型类:

class B<ParameterClass> where ParameterClass : A
{
    public B()
    {
        ParameterClass a = new ParameterClass(1);
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到一个CS0304,编译器说我没有new()限制,但我只想调用一个在A上定义的构造函数,因为ParameterClass总是一个A,编译器可以确定A(int数)构造函数将始终存在.我只是不明白为什么会有这种限制.

Jon*_*eet 7

仅仅因为声明了构造函数A并不意味着它将被声明ParameterClass.例如:

public class Bad : A
{
    public Bad(string x) : base(x.Length)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我使用:

var b = new B<Bad>();
Run Code Online (Sandbox Code Playgroud)

你期望做什么?你写它的方式,如果它有效的我会期望它试图调用new Bad(1),这肯定是无效的.