これは私の「私はそれが不可能だと思うが、私は確認が必要」という質問のもう一つです。子クラスの基本クラスから共有プロパティを継承できないのですか?
私は子クラスの束の基本クラスを持っています。現在のところ、この基本クラスには、子供が使用するいくつかの一般的なプロパティ(Name
など)があります。ベースは抽象クラス(MustInherit)です。技術的には、これは、子クラスがインスタンス化されるたびに、Name
という独自のコピーをメモリにラグさせることを意味します。問題は、Name
が、指定された子のすべてのインスタンスに対して固定値になることです。すなわち、Child1.Name
は"child_object1"
を返し、Child2.Name
は"child_object2"
を返します。
このプロパティは共有プロパティの完全な候補に見えますが、問題が発生します。 Name
をベースクラスの共有プロパティとして定義すると、ベースから派生した子クラスが何であるかにかかわらず、すべてが共有プロパティ(またはメソッドなど)の正確な目的である同じName
を共有するように見えます。
私が考えることができる唯一の回避策は、Name
を基本クラスから削除し、各子クラスで直接共有プロパティとして再実装することです。しかし、これは基本クラスを持つという機能を最初から守っているようだ。少なくとも原理的には
私の質問は、デザインの観点からこの問題に取り組むための好ましいアプローチは何ですか? 1つの抽象基本クラスから少なくとも50の派生子クラスを想定します。
@cdhowie:少し編集しました。私はそれらが半互換性のある用語であると考えました。 – Kumba
@cdhowie:私は抽象的なアプローチについて考えました。しかし、私はそれを(少なくともVB.Netでは)共有することはできません。私は派生クラスの名前をモジュールにConstsとして格納しているので、基本クラスに抽象プロパティを定義し、子クラスでオーバーライドして定数を返すことができます。最初のアプローチは、基本クラスで定義された共通プロパティを保持し、各派生/子クラスにパラメータレスコンストラクタで 'MyBase.Name = CHILD1_NAME'を実行させることで、各クラスの混乱を減らすことでした。 – Kumba
@クンバ:しかし、「共有」とは、そのプロパティの*インスタンスが1つしか存在しないことを意味し、ベースタイプに属します。したがって、各クラスのパラメータのないコンストラクタでプロパティを設定すると、**各オブジェクトの名前は、直前に作成されたオブジェクトの名前になります。あなたは共有と抽象を混在させることはできません。共有修飾子を削除して抽象的な状態にしておきます。グローバル変数を作成することを「共有」と考えてください。それはこのコンテキストで意味をなさないでしょうか? – cdhowie