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

结构如何从类型参数约束中继承?

如何解决《结构如何从类型参数约束中继承?》经验,为你挑选了1个好方法。

我看到以下代码行:

class Sample where T:class where U: struct, T

在上面的例子中,参数U值类型,它派生自引用类型 T.

这条线怎么合法?
此外,如果值类型继承自引用类型,则在哪里分配内存:堆或堆栈?



1> Jon Skeet..:

与另一个答案相反,有超出T = System.Object的类型,其中编译:

class Samplewhere T:class where U:struct, T

"T:class"约束实际上并不意味着T必须是一个类.这意味着T必须是参考类型.这包括接口,结构可以实现接口.因此,例如,T = IConvertible,U = System.Int32非常有效.

我无法想象这是一个特别常见的或有用的约束,但它不是,因为它似乎一见钟情的常理.

至于更一般的观点:正如Obiwan Kenobi所说,这一切都取决于你的观点.CLI规范对此有一个非常复杂的解释,其中"派生自"和"继承自"并不意味着完全相同的事情,IIRC.但不,你不能指定一个值类型的基本类型 - 它总是System.ValueType或者System.Enum(源自System.ValueType),并且根据你是否声明一个struct或一个来选择enum.有些令人困惑的是,这两者本身都是参考类型......

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