作成した抽象クラスから継承するクラスのコレクションがあります。抽象クラスの具体的な実装のインスタンスを作成するためのファクトリとして抽象クラスを使用したいと思います。
親クラスを除くすべてのコードからコンストラクターを非表示にする方法はありますか?
基本的にはこうしたい
public abstract class AbstractClass
{
public static AbstractClass MakeAbstractClass(string args)
{
if (args == "a")
return new ConcreteClassA();
if (args == "b")
return new ConcreteClassB();
}
}
public class ConcreteClassA : AbstractClass
{
}
public class ConcreteClassB : AbstractClass
{
}
しかし、私は誰もが 2 つの具象クラスを直接インスタンス化できないようにしたいと考えています。MakeAbstractClass() メソッドだけが基本クラスをインスタンス化できるようにしたいと考えています。これを行う方法はありますか?
UPDATE
Abstract クラスの外部から ConcreteClassA または B の特定のメソッドにアクセスする必要はありません。Abstract クラスが提供する public メソッドだけが必要です。具体的なクラスがインスタンス化されるのを防ぐ必要はありません。抽象クラスの内部にあるいくつかの非常に具体的なものの実装が異なるだけで、新しいパブリック インターフェイスは提供されないため、回避しようとしているだけです。
私にとって、最も簡単な解決策は、samjudson が述べたように子クラスを作成することです。ただし、抽象クラスのファイルが必要以上に大きくなるため、これは避けたいと思います。組織のために、クラスをいくつかのファイルに分割しておきたいと思います。
これは簡単に解決できるものではないと思います...