当前位置:  开发笔记 > 编程语言 > 正文

C#泛型:引用类型与值

如何解决《C#泛型:引用类型与值》经验,为你挑选了2个好方法。

在我的API编码期间,我遇到了很多关于通用引用类型与通用值类型的差异的混淆.

伙计们,问题是这两种野兽之间在约束和功能(最重要/容易被忽视的)方面有什么不同:

class ReferenceGeneric  where ???
{

}

struct ValueGeneric : where ???
{


}

编辑只是为了澄清问题和我所追求的:我想知道你可以用通用引用类型做什么而不能用通用值类型...反之亦然

编辑#2进一步澄清:如果泛型类型是引用类型或值类型,那么如何限制T-是否存在关于如何约束每种类型的差异?



1> Jon Skeet..:

请注意,声明为结构的任何内容始终是值类型,声明为类的任何内容始终是引用类型.换句话说,List仍然是一个引用类型,如果你有:

struct Foo
{
    T value;
}

然后Foo仍然是一个值类型.

至于你可以用泛型类型什么- 它们实际上只是遵循值类型和引用类型的常规规则; 至于你可以用类型T 的类型值做什么,这取决于是否/如何T约束.它不会因为泛型类型本身是结构还是类而有所不同.

编辑:Sasha Nullable在评论中提及.我不确定这里的"异常"是什么 - 除了Nullable不满足" where T : struct"或" where T : class"约束.它仍然是一种价值类型(这是重点的一部分).



2> C. Ross..:

响应Edit2:您可以通过以下方式限制允许引用或值的类型:

参考:

class ReferenceGeneric  where T: class
{

}

值:

struct ValueGeneric  where T: struct 
{


}

从MSDN上的以下页面 http://msdn.microsoft.com/en-us/library/d5x73970.aspx

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有