1

I am new to C#. I have a parent class declared:

class PmdTable
{
}

and I have a child class

class PmdSdStageCfg : PmdTable
{

Now it complains if I do like:

List<OracleObject.PmdTable> instanceList = new List<PmdSdStageCfg>();

I get this error

Cannot implicitly convert type 'System.Collections.Generic.List' to 'System.Collection.Generics.List'.

Since PmdTable is the parent class. Why does this not work?

4

2 回答 2

3

这不起作用,因为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()); 
于 2013-10-01T21:23:55.740 回答
1

技术上的答案是因为 List 不支持协方差。

由于您是 C# 新手,因此这可能意义不大。使集合以类型安全的方式工作是一个令人讨厌的副作用。对您来说,结果是您正在编写的内容无法编译,但以下内容可以正常工作:

List<PmdTable> instanceList = new List<PmdTable>();
instanceList.Add(new PmdSdStageCfg());
于 2013-10-01T21:28:21.023 回答