我搜索了generic type in C#
,得出了这样的结论:
1.所有引用类型都基于Class
1.所有值类型都基于struct
1.除了value和reference类型之间的全局差异外,struct和class之间的主要差异是:
- 结构中没有继承
- 结构不能包含空构造函数(不带参数)
1.泛型类型有六种基本实现:
- 其中T:class ==〉泛型参数必须是引用类型
- 其中T:classA ==〉泛型参数必须是类classA的示例
- 其中T:InterfaceA ==〉泛型参数必须实现接口InterfaceA
- 其中T:New()==〉泛型参数必须是一个类+有一个默认的空构造函数
- 其中T:U ==〉泛型参数必须派生类U或实现接口U
- 其中T:struct ==〉泛型参数必须是值类型
所以我需要知道:
1.如果我的结论是正确的?
1.我无法理解以下两者之间的区别:
- 其中T:New()==〉空构造函数的类
- 其中T:class,New()==〉空构造函数的class
为什么使用第二种形式?为什么不使用第一种形式?
3条答案
按热度按时间oyt4ldly1#
你所描述的是通用的 * 约束 *。
其中T:New()==〉泛型参数必须是一个类+有一个默认的空构造函数
不,这只是说“类型参数必须有一个无参数构造函数”。这实际上包括 * 所有 * 值类型。即使你不能为C# 6之前的结构声明自己的无参数构造函数,你总是可以 * 调用 * 它们。例如:
因此,如果您有:
完全可以说
6qqygrtg2#
泛型约束
new()
意味着该类型具有无参数构造函数。该类型可以是struct或class。structs不能提供 custom 无参数构造函数,这是因为所有structs都已经为它们提供了无参数构造函数,具有它们无法更改的默认行为 *。这并不意味着永远不能使用无参数构造函数创建structs。iezvtpos3#
结构不能包含空构造函数(不带参数)。
不正确。该结构体总是有一个无参数构造函数。但是不允许你改变它,改变你自动得到的默认无参数构造函数。