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*
;