このアセンブリ内のファクトリによってのみインスタンス化されるアセンブリのクラスを作成しました。
外部アセンブリ:
MyClass myClass = factoryInstance.GetInstanceOfMyClass();
このクラスを外部でインスタンス化することを禁止する必要があります
禁断:
MyClass myClass = new MyClass();
私はいくつかの複雑なアプローチを見てきました。私が見逃している簡単な方法はありますか?
このアセンブリ内のファクトリによってのみインスタンス化されるアセンブリのクラスを作成しました。
外部アセンブリ:
MyClass myClass = factoryInstance.GetInstanceOfMyClass();
このクラスを外部でインスタンス化することを禁止する必要があります
禁断:
MyClass myClass = new MyClass();
私はいくつかの複雑なアプローチを見てきました。私が見逃している簡単な方法はありますか?
最も簡単な方法は、コンストラクターを作成することinternal
です。
public class MyClass
{
internal MyClass()
{
}
}
ファクトリ メソッドが同じアセンブリに配置されている限り、クラスのインスタンスを作成できますが、アセンブリの外部のコードはそれを実行できません。
コンストラクターの可視性を内部にして、それが含まれているアセンブリの外部の他のクラスがそれを見ることができないようにします。
アセンブリ 1
public class MyClass
{
internal MyClass()
{
// ... code here ...
}
}
public class MyFactory
{
public MyClass GetInstanceOfMyClass()
{
return new MyClass();
}
}
アセンブリ 2
// Invalid
MyClass myClass = new MyClass();
// Valid
MyClass myClass = myFactoryInstance.GetInstanceOfMyClass();
次に、このクラスをアセンブリ内で (ファクトリを介して) インスタンス化できますが、アセンブリの外でインスタンス化することはできません。