![]() |
1
20
首先,正如托马斯所说,它在clr中不受支持。 第二,这是如何工作的?假设你有
t只能用于输出位置。如您所注意的,类不能有任何类型为t的字段,因为该字段可以写入。类不能有任何采用t的方法,因为这些方法是逻辑写入的。假设您有这个特性——您将如何利用它? 如果我们可以,比如说,使t类型的只读字段合法化,那么这对于不可变类是有用的;这样我们就大大减少了它被不正确地写入的可能性。但是,很难想出其他能够以类型安全的方式允许差异的方案。 如果你有这样的场景,我想看看。这将是将来某一天在clr中实现这一点的方向。 更新:参见 Why isn't there generic variance for classes in C# 4.0? 关于这个问题的更多信息。 |
![]() |
2
8
据我所知,clr不支持此功能,因此添加此功能也需要在clr端进行大量工作。我相信在4.0版本之前,clr实际上支持接口和委托的协变和逆变,所以这是一个相对简单的实现扩展。 (尽管如此,为类支持这个特性绝对是有用的!) |
![]() |
3
1
如果允许,可以定义有用的100%类型安全(没有内部类型转换)类或结构,如果它们的构造函数接受一个或多个T或T供应商的,则可以定义与其类型T相关的协变的类或结构。有用的,可以定义100%类型安全类或结构,如果它们的构造函数与T相反,则可以定义与其类型T相关的协变的类或结构。接受一个或多个T消费者。我不确定类相对于接口有多大的优势,除了使用“new”而不是使用静态工厂方法(很可能来自与接口名称类似的类),但是我可以肯定地看到使用不可变结构支持协方差的情况。 |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |