C#泛型和子类化-为什么我不能在ctor上给出类型参数?(简单)

C#泛型和子类化-为什么我不能在ctor上给出类型参数?(简单),c#,C#,我有 公共类LDBList:列表,其中T:LDBRootClass{ 公共LDBList(LDBList x):基本(x){}//不允许 公共LDBList(LDBList x):允许的基本(x){}// ... } 为什么构造函数上不接受泛型类型?该语言不支持泛型构造函数。请看一下: 将其与以下内容进行比较: 方法的语法包括一个类型参数\u列表,以及一个类型参数\u约束\u子句,而构造函数的语法没有 即使有,也不清楚代码的含义,因为您正在声明一个与现有类型参数同名的类型参数,即类中声明的T。

我有

公共类LDBList:列表,其中T:LDBRootClass{
公共LDBList(LDBList x):基本(x){}//不允许
公共LDBList(LDBList x):允许的基本(x){}//
...
}

为什么构造函数上不接受泛型类型?

该语言不支持泛型构造函数。请看一下:

将其与以下内容进行比较:

方法的语法包括一个
类型参数\u列表
,以及一个
类型参数\u约束\u子句
,而构造函数的语法没有


即使有,也不清楚代码的含义,因为您正在声明一个与现有类型参数同名的类型参数,即类中声明的
T

我想OP是在问为什么类构造函数的名称没有泛型类型参数(不是泛型类型参数)。构造函数不包含任何类型参数列表,请参阅(但方法可以,请参阅)。我希望有一个原因,但因为microsoft说可以。@user3779002如果您想知道原因,原因是它完全没有必要。在构造函数名称上有一个
参数并不意味着什么,也对编译器没有任何帮助。如果任何类(泛型或非泛型)可以为其构造函数提供额外的泛型类型参数,我想这是一件好事,但C#和CLI不允许这样做(即构造函数不能有额外的泛型类型参数),因此这就是为什么它不是一件事。@Dai“如果有[generic]的话,我想这将是一件好事。”类可以为其构造函数提供额外的泛型类型参数,但C#[…]不允许“是的,这不是巧合,我接下来的问题就是这么说的
public class LDBList<T> : List<T> where T : LDBRootClass {
    public LDBList<T>(LDBList<T> x) : base(x) { }  // not allowed
    public LDBList   (LDBList<T> x) : base(x) { }  // allowed
    ...
}
constructor_declaration
    : attributes? constructor_modifier* constructor_declarator constructor_body
    ;
method_declaration
    : method_header method_body
    ;

method_header
    : attributes? method_modifier* 'partial'? return_type member_name type_parameter_list?
      '(' formal_parameter_list? ')' type_parameter_constraints_clause*
    ;