c# - 泛型继承......不起作用

标签 c# generics inheritance

<分区>

为什么这不会编译?也许 FW5 可以实现这一点……

    static void Main(string[] args)
    {
        List<Foo> foos = new List<Goo>(); 
    }

    public class Foo
    {

    }

    public class Goo : Foo
    {

    }

Stackover 流程​​说我的帖子主要是代码......但这可能是个问题所以我试图通过代码文本比率验证......希望这就足够了

现在它说我没有正确描述问题..再读一遍对我来说似乎没问题......

最佳答案

因为列表 Goo 不是 Foo 的列表.如果可行,您可以(在编译时)执行以下操作:

foos.Add(new Foo());

这显然行不通,因为列表只能取 Goo实例。

差异确实存在(取决于框架版本),但仅限于 a:接口(interface)和委托(delegate)(不是像列表这样的具体类型),以及 b:已知所有“输入”或已知所有“输出”场景。

例如,以下将在最近的框架/编译器版本上编译:

IEnumerable<Goo> goos = new List<Goo>();
IEnumerable<Foo> foos = goos;

在这种情况下,它工作正常,因为每个 Goo静态已知为 Foo .从技术上讲,这使用了 out的一部分 IEnumerable<out T>签名。

关于c# - 泛型继承......不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21379649/

相关文章:

c# - 将对象转换为其他对象的类型

c# - 使用方法参数作为泛型类型参数

c# - 使用字典和泛型创建嵌套的 JSON 可序列化对象结构时,.NET 中的 C# 协方差存在问题

java - parent 可以调用子类方法吗?

c# - 为什么我的按钮状态不一致?

java - 如何在 Java 中隐藏静态变量

c# - HttpRequest 的转储属性

c# - MVC4 : Get View or partial (file) name being rendered from extension method

c# - 为什么在参数列表评估后执行空检查?

c# - Membership.IsApproved 值未保存