私は .Net を使用しており、単純なマスターおよびサブクラスの設計をしています。私のマスター クラスにはほぼすべての機能が含まれており、サブクラスはマスターから値を設定するだけで済みます。マスターを抽象クラスにすることを検討していましたが、オーバーライドする必要があるメソッドはありませんが、マスター クラスは必ずしも単独で存在できるわけではないという考えを強調したいと思います。また、マスターのプロパティはサブクラスで設定する必要があることを強調したいと思います。ここでは何が適切ですか?助けてくれてありがとう!
6 に答える
誰もマスター クラスのインスタンスを作成しない場合は、作成するのが適切abstract
です。
プロパティについては、抽象プロパティにします。マスターで、次のように記述します。
public abstract int MyProperty { get; }
サブクラスはそれをオーバーライドする必要があります。
マスタークラスが実際に具体的なインスタンスを持つことができない場合、それを抽象化することはまったく問題なく、実際に正しいことです。
抽象クラスが適切です。サブクラスがそれを提供する必要があるように、関心のあるプロパティを取る保護されたコンストラクターを持つことができます
マスター クラスを抽象化しても問題ないはずです。結局のところ、継承せずに使用することは望ましくありません。
子クラスでオーバーライドする必要があるように、プロパティを抽象として宣言することもできます。
public abstract string MyProperty { get; set; }
私のマスター クラスにはほぼすべての機能が含まれており、サブクラスはマスターから値を設定するだけで済みます。
これは、この値を受け入れてマスター クラスのインスタンスを返すマスター クラスで静的ファクトリ メソッドを公開する必要があるように思えます。マスター クラスのコンストラクターをプライベートにして、静的ファクトリ メソッドだけがマスター クラスのインスタンスを作成できるようにします。
このようなもの:
public class MasterClass
{
public string MyValue { get; set; }
private MasterClass()
{
}
public static MasterClass CreateMaster(string val)
{
MasterClass mc = new MasterClass() { MyValue = val };
return mc;
}
}
すでに「マスター」にある特定の状態を設定する以外に拡張するものが何もない場合、継承はまったく必要なく、代わりに「マスター」クラスのインスタンスの構築方法を制御する必要があるように思えます。
代わりに、ファクトリ パターンを使用して見ることができます。
ただし、動作を変更する場合は、間違いなく の使用abstract
が保証されます。