将父类引用列表与子类对象列表一起分配不起作用
本文关键字:列表 一起 分配 不起作用 对象 父类 引用 子类 | 更新日期: 2023-09-27 18:33:27
我是C#的新手。我声明了一个父类:
class PmdTable
{
}
我有一个孩子班
class PmdSdStageCfg : PmdTable
{
现在它抱怨,如果我喜欢:
List<OracleObject.PmdTable> instanceList = new List<PmdSdStageCfg>();
我收到此错误
无法将类型"System.Collections.Generic.List"隐式转换为"System.Collection.Generics.List"。
因为 PmdTable 是父类。为什么这不起作用?
这
不起作用List<T>
因为不是协变的。
有关详细信息,请参阅泛型中的协方差和逆变。
如果允许这样做,您将能够执行完全无效的操作:
class OtherPmd : PmdTable {}
// NOTE: Non-working code below
// This will break, since it's actually a List<PmdSdStateCfg>
// But it should be allowed, since instanceList is declared List<OracleObject.PmdTable>
instanceList.Add(new OtherPmd());
技术答案是因为 List 不支持协方差。
由于您不熟悉 C#,这可能意义不大。这是使集合以类型安全的方式工作的令人讨厌的副作用。对你来说,结果是你正在编写的内容不会编译,但以下内容可以正常工作:
List<PmdTable> instanceList = new List<PmdTable>();
instanceList.Add(new PmdSdStageCfg());