Lam*_*fif 6 .net c# oop generics types
我搜索了一下generic type in C#,我得出了这个结论:
Classstruct除了值和引用类型之间的全局差异之外,struct和class之间的主要区别是:
结构中没有继承
结构不能包含空构造函数(不带参数)
其中T:class ==>泛型参数必须是引用类型
其中T:classA ==>泛型参数必须是类classA的实例
其中T:InterfaceA ==>泛型参数必须实现接口InterfaceA
其中T:New()==>泛型参数必须是类+具有默认的空构造函数
其中T:U ==>泛型参数必须从类U派生或实现接口U.
其中T:struct ==>泛型参数必须是值类型
所以我需要知道:
其中T:New()==>带有空构造函数的类
其中T:class,New()==>带有空构造函数的类
为什么使用第二种形式?为什么我们不只是使用第一个?
谢谢,
Jon*_*eet 10
您所描述的是通用约束.
其中T:New()==>泛型参数必须是类+具有默认的空构造函数
不,那只是说"类型参数必须有一个无参数构造函数".这实际上包括所有价值类型.即使您无法在C#6之前为结构声明自己的无参数构造函数,也可以随时调用它们.例如:
Guid guid = new Guid();
Run Code Online (Sandbox Code Playgroud)
所以如果你有:
public void Foo<T>() where T : new()
Run Code Online (Sandbox Code Playgroud)
打电话完全有效
Foo<Guid>();
Run Code Online (Sandbox Code Playgroud)