【发布时间】:2014-08-14 17:58:48
【问题描述】:
这听起来像是一个常见的问题,所以如果你有一个基类 A 和 List<SuperClass> 类型的公共属性,并且你在 B 类中继承了该列表,但想要使用更专业的类型参数,那么最佳实践是什么?列表:
class SuperClass
{
public bool Flag;
}
class SubClass : SuperClass
{
public int Number;
}
class A
{
public List<SuperClass> Elements { get; }
}
class B : A
{
public List<SubClass> Elements { get; set; }
}
那么如何用一个新列表覆盖 Elements 列表,但仍然确保如果另一个类只知道 A 对象,它会被访问?
class C
{
List<A> AList;
void FillList()
{
AList.Add(new B());
}
void DoSomething()
{
foreach (var a in AList)
forach(var super in a.Elements)
super.Flag = true;
}
}
【问题讨论】:
-
你不能覆盖它,因为它们是不同的类型。您是否正在寻找
new来隐藏基本实现?public new List<SubClass> Elements { get; set; } -
这里有一篇关于这个主题的好帖子:stackoverflow.com/questions/2231668/…
-
看起来像一个设计问题。当您想将 B 类已知的项目放入该列表中时,为什么要创建 List?
标签: c# .net inheritance collections