私は知っています - 私はできませんが。
インターフェイスを実装するすべてのクラスに同じ所有者 (通常はコンストラクターで定義) を持たせたいと考えています。それを行うためのベストプラクティスは何ですか?
基本抽象クラスなどを使用する必要がありますか?
私は知っています - 私はできませんが。
インターフェイスを実装するすべてのクラスに同じ所有者 (通常はコンストラクターで定義) を持たせたいと考えています。それを行うためのベストプラクティスは何ですか?
基本抽象クラスなどを使用する必要がありますか?
インターフェイスは、実装者と消費者の間の契約を定義します。
その契約の一部は、コンパイラによって強制されます。たとえば、インターフェイスのすべての実装には、特定のパラメーターを受け取る特定の名前の必要な機能があります。
ただし、コンパイラによって強制されないインターフェイスの別の部分があります。これは、インターフェイスのドキュメントで説明されているコントラクトの一部です。すべての実装者に、どのような規則に従う必要があるかを伝えるだけで十分であると判断できます。多くの図書館がそのスタンスをとっています。Windows API は 1 つの顕著な例です。
コードによる強制に固執している場合、インターフェイスは役に立ちません。コードで制約を表現するものが必要であり、この場合は実装が必要になります。つまり、クラスを使用する必要があります。(ほぼ)抽象基本クラスでそれを実現できます。クラスの唯一の具体的な部分は、所有権の制約を強制します。クラスの残りの部分は、一連の抽象仮想メソッドになります。これは、Delphi キーワードが暗示する意味でのインターフェイスではありません。ただし、意味的にはインターフェースです。
もちろん、インターフェースを共通の祖先に実装することも、少なくともインターフェースを実装するクラスの共通の祖先を持つこともできます。ただし、インターフェイスを介してこれを強制することはできません。インターフェースにはコンストラクターがなく、インターフェースは、どのクラスがそれを実装できるか、または実装できないかを強制できません。
Owner
最良のオプションは、インターフェイスを介してプロパティを公開することだと思います。そうすれば、少なくともインターフェイスを介して所有者を取得でき、実装クラスに少なくともそのプロパティを実装するように強制できます。ところで、インターフェイスは、オブジェクトを返すか、オブジェクト パラメーターを持つプロパティとメソッドを持つことができます。