親オブジェクトをその子クラスの 1 つにキャストできないことはわかっています。
では、次の問題を解決するための適切なアプローチは何でしょうか: 親クラス "Person" と 2 つの子クラス、Customer と Employee があるとします。Person クラスは抽象的ではないことに注意してください(インスタンス化できることを意味します)。これで、次のメソッド シグネチャが得られました。
public Person GetPersonById(long id)
これにより、Person またはその子クラスの 1 つを返すことができます。このメソッドを使用すると、GetType() を介して子であるかどうかを確認できます。ただし、子クラスに固有のフィールド/メソッドには、単にキャストできないため、簡単にアクセスできません。1 つの方法は、親クラスをパラメーターとして受け取り、新しい子クラス インスタンスを返す各子クラスのコンストラクターを実装することです。これには、まだ多くの重複コードがあるという欠点があります (すべての子にもすべての親フィールドを割り当てる必要があるため)。
私が考えることができる別のアプローチは、メソッドを次のように変更することです。
public object GetPersonById(long id)
そうすれば、任意のクラスを返すことができました。返されたクラスの型を確認してから、適切にキャストします。しかし、どういうわけか、このアプローチは汚いようです。
誰かがこれを行うためのより良い方法を持っていますか?