在我的API编码期间,我遇到了很多关于通用引用类型与通用值类型的差异的混淆.
伙计们,问题是这两种野兽之间在约束和功能(最重要/容易被忽视的)方面有什么不同:
class ReferenceGeneric <T> where ???
{
}
Run Code Online (Sandbox Code Playgroud)
和
struct ValueGeneric <T>: where ???
{
}
Run Code Online (Sandbox Code Playgroud)
编辑只是为了澄清问题和我所追求的:我想知道你可以用通用引用类型做什么而不能用通用值类型...反之亦然
编辑#2进一步澄清:如果泛型类型是引用类型或值类型,那么如何限制T-是否存在关于如何约束每种类型的差异?
Jon*_*eet 15
请注意,声明为结构的任何内容始终是值类型,声明为类的任何内容始终是引用类型.换句话说,List<int>仍然是一个引用类型,如果你有:
struct Foo<T>
{
T value;
}
Run Code Online (Sandbox Code Playgroud)
然后Foo<string>仍然是一个值类型.
至于你可以用泛型类型做什么- 它们实际上只是遵循值类型和引用类型的常规规则; 至于你可以用类型T 中的类型值做什么,这取决于是否/如何T约束.它不会因为泛型类型本身是结构还是类而有所不同.
编辑:Sasha Nullable<T>在评论中提及.我不确定这里的"异常"是什么 - 除了Nullable<T>不满足" where T : struct"或" where T : class"约束.它仍然是一种价值类型(这是重点的一部分).
C. *_*oss 10
响应Edit2:您可以通过以下方式限制允许引用或值的类型:
参考:
class ReferenceGeneric <T> where T: class
{
}
Run Code Online (Sandbox Code Playgroud)
值:
struct ValueGeneric <T> where T: struct
{
}
Run Code Online (Sandbox Code Playgroud)
从MSDN上的以下页面 http://msdn.microsoft.com/en-us/library/d5x73970.aspx
| 归档时间: |
|
| 查看次数: |
10792 次 |
| 最近记录: |