【发布时间】:2017-01-18 22:37:57
【问题描述】:
我有一个带有派生类的抽象类:
abstract class FoxObject : ICloneable
{
public int lineNumber;
public string line, name;
public FoxObject parent;
public List<FoxObject> children;
private Guid guid;
protected FoxObject(int lineNumber, string line, string name, FoxObject parent, List<FoxObject> children)
{
this.lineNumber = lineNumber;
this.line = line;
this.name = name;
this.parent = parent;
this.children = children;
guid = Guid.NewGuid();
}
//Code not relevant to this question.
}
从中我有几个派生类(全部直接继承自FoxObject:Symbol、Graphic、Alias、Action 和 Update。
每个Graphic 包含一个List<Symbol> 每个符号一个包含别名、操作和更新的列表(或三个单独的列表,这是问题的一部分)。然而目前,这些都由父类中的List<FoxObject> 处理,因此存在高级别的多态性。
我的问题是,有没有办法在派生类中指出 List<FoxObject> 实际包含的内容,以节省每次都必须转换它?
如果不是,那么让这些List<T>s 具有相同的名称但不同的types 并将其从FoxObject 类中删除是否有意义?
【问题讨论】:
-
听起来你不应该从
FoxObject派生。显然,当Symbol与FoxObject有不同的成员时,它们不应该属于同一个继承链。改为考虑组合,这意味着Symbol具有三个对FoxObject的引用 - 一个用于Graphics,一个用于Alias,一个用于Action。 -
Symbol 有 3 个不同的列表吗?别名、操作和更新?
-
是这样还是你想要这样?我不知道,但从你写的
Symbolshpuld 引用了另一个FoxObject,而不是FoxObject不知道List<Alias>的任何东西,但是Symbol知道。 -
@MaksimSimkin 它可以做,或者
List<FoxObject>children`可以包含所有这三个。这是问题的一部分(可能没有问得不够清楚)。 -
但是你写了一个
Symbol有三个列表而不是一个。
标签: c# oop inheritance