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