やあ、
あなたは別の派生型に1型から派生したクラスを変換する必要が見つけた場合、それは最初の設計に問題があることを香りです。
ここで気になるのは、マネージャオブジェクトを間違って表していることです。
基本クラスに戻って、基本クラス(連絡先)にEmployeeオブジェクトとManagerオブジェクトの両方の共通要素が含まれている点をオブジェクト指向で考えます。派生オブジェクトは基本クラスの特殊化だけです。
この場合、従業員のインスタンスのマネージャではありませんか?
ManagerクラスとEmployeeクラスの両方に、EmployeeタイプのreportsToデータメンバーが必要です。
現時点で唯一の違いは、マネージャオブジェクトに、独自のdirectReportsであるEmployeeオブジェクトのコレクションが追加されていることです。これはおそらく、Employeeオブジェクトのコンテナへのポインタとして実装する必要があります。
ManagerオブジェクトからEmployeeオブジェクトを分離する必要がある動作の特殊化は考えられません。
ええと、おそらく、その中に連絡先の詳細を含む基本クラスのPersonを作成してください。
編集:申し訳ありませんが、私は十分にはっきりしていなかったと思います。私が説明したのは、あなたのContactクラスから直接派生した2つの別々のクラスにつながるわけではないので、実行時に元の質問だったEmployeeのインスタンスをManagerに変更する必要があります。
つまり、Contactクラスから直接継承した2つの派生クラスEmployeeとManagerを持つ必要はありません。
企業で雇用されている人々の両方のインスタンスではありませんか?なぜマネージャーと従業員を区別するのですか?マネージャーになれば従業員はもはや従業員ではありませんか?
2つの派生クラス、マネージャーと従業員を持つことは、完全に間違っています。あなたは "isa"と "have a"の関係で物事を分解しようとしましたか?そうすれば、基本的な構造が間違っていることがわかります。
従業員の "isa"という連絡先は意味がありません。 「従業員の可能性が高い」「人と人」には「連絡先の詳細のセット」があります。
多分Managerクラスを従業員の特殊化として派生していますか?従業員は "isa"人です。マネージャー "isa" "人"である従業員。
HTH
歓声、
NHibernateの質問は、NHibernateが基本型として取り出されたときにオブジェクトをサブクラスとして保存することに文句を言うかどうかを調べることでした。 –