【发布时间】:2013-04-11 14:28:45
【问题描述】:
我们知道不可能将父对象强制转换为其子类之一。
那么什么是解决以下问题的好方法: 假设我有一个父类“Person”和两个子类:Customer 和 Employee。请注意,Person 类不是抽象的(意味着它可以被实例化)。 现在我得到了以下方法签名:
public Person GetPersonById(long id)
这使得返回 Person 或其子类之一成为可能。 如果我使用这种方法,我可以通过 GetType() 检查它是否是孩子。但是,我不能轻松访问特定于子类的字段/方法,因为我不能只转换它。 一种方法是为每个子类实现一个构造函数,该构造函数将父类作为参数并返回一个新的子类实例。这样做的缺点是我仍然会有很多重复的代码(因为我还必须为每个孩子分配每个父字段)。
我能想到的另一种方法是将方法更改为:
public object GetPersonById(long id)
这样,我可以返回任何课程。我只是检查返回的类的类型,然后正确地转换它。但不知何故,这种方法似乎很脏。
有人有更好的方法吗?
【问题讨论】:
标签: c# inheritance casting