gpt4 book ai didi

c# - 结构如何从类型参数约束的类继承?

转载 作者:太空狗 更新时间:2023-10-30 00:22:36 26 4
gpt4 key购买 nike

我看到了下面这行代码:

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

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

那条线路怎么可能合法?
另外,如果值类型继承自引用类型,那么内存分配在哪里:堆还是栈?

最佳答案

与另一个答案相反,除了 T=System.Object 之外还有其他类型可以编译:

class Samplewhere T:class where U:struct, T

“T : class”约束实际上并不意味着 T 必须是一个类。这意味着 T 必须是引用类型。这包括接口(interface),结构可以实现接口(interface)。因此,例如,T=IConvertible, U=System.Int32 工作得很好。

我无法想象这是一个特别常见或有用的约束,但它并不像初看起来那样完全违反直觉。

至于更一般的观点:正如 Obiwan Kenobi 所说,这完全取决于您的观点。 CLI 规范对此有相当复杂的解释,其中“派生自”和“继承自”并不意味着完全相同,IIRC。但是不,您不能指定值类型的基类型 - 它始终是 System.ValueTypeSystem.Enum(派生自 System.ValueType ),这取决于您声明的是 struct 还是 enum。有点令人困惑的是,这两者本身都是引用类型......

关于c# - 结构如何从类型参数约束的类继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/580257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com