C# 泛型类与约束
我正在使用泛型类和约束。下面是我的课C# 泛型类与约束,c#,.net,string,generics,C#,.net,String,Generics,我正在使用泛型类和约束。下面是我的课 public class GenericList<T> where T : new() { private Node head; // constructor public GenericList() { head = null; } } 公共类泛型列表,其中T:new() { 专用节点头; //建造师 公共通用列表(
public class GenericList<T> where T : new()
{
private Node head;
// constructor
public GenericList()
{
head = null;
}
}
公共类泛型列表,其中T:new()
{
专用节点头;
//建造师
公共通用列表()
{
head=null;
}
}
当我用integer创建对象时,效果很好
GenericList<int> list = new GenericList<int>();
GenericList list=new GenericList();
但当我尝试使用字符串时,它会给我以下编译时错误
GenericList<string> list1 = new GenericList<string>();
genericlist1=新建GenericList();
“string”必须是具有公共无参数构造函数的非抽象类型,才能将其用作泛型类型或方法“GenericTest.GenericList”中的参数“T”
而且,当我像任何自定义类一样传递引用参数时,它也可以正常工作
字符串有什么问题?没有公共的无参数构造函数。。这就是为什么new()
约束不适用于它的原因
阅读:
其中T:new()
类型参数必须具有公共无参数构造函数。什么时候
与其他约束一起使用时,新的()约束必须
最后指定
没有公共无参数构造函数。。这就是为什么new()
约束不适用于它的原因
阅读:
其中T:new()
类型参数必须具有公共无参数构造函数。什么时候
与其他约束一起使用时,新的()约束必须
最后指定
String
类型具有公共无参数构造函数是毫无意义的,因为String
是不可变的,这意味着如果String
具有此构造函数,则必须创建一个空字符串对象,这太愚蠢了,因为在创建之后您不能更改它。对于String
类型来说,使用公共无参数构造函数是毫无意义的,因为String
是不可变的,这意味着如果String
将使用此构造函数,那么它将不得不创建一个空字符串对象,这太愚蠢了,因为在创建之后,您无法更改它。Konstantin已经解释了它失败的原因,但是为什么您要从T开始呢?您想何时调用new T()
?这就是约束启用的全部内容。这些都不能回答为什么需要无参数构造函数约束。同样,您希望何时在genericslist
中调用新T()
?Konstantin已经解释了它失败的原因-但是为什么要从T开始呢?您想何时调用new T()
?这就是约束启用的全部内容。这些都不能回答为什么需要无参数构造函数约束。同样,您希望何时在genericslist
中调用new T()
?