オブジェクトのインスタンス化を制御したい場合、コンストラクターをプライベートまたは内部にすることがよくあります。
public class A {
private A(int aParam) { }
}
ただし、これは基本的にクラス「A」を封印することと同じです。これは、誰も継承できないためです。
したがって、コンストラクターを保護することができます。
public class A {
protected A(int aParam) { }
}
public class B {
protected B(int aParam) : base(aParam) { }
}
ただし、これは、B (または B から派生した任意のクラス) のコードが新しい A をインスタンス化できることを意味します。
インスタンス化を制御する方法を探していますが、クラスをシールする必要はありません (効果的またはその他の方法で)。
注: とにかく、リフレクションやその他のトリックを使用してクラスをいつでもインスタンス化できることは知っています。私は明示的な「契約」を作成することにのみ興味があります。誰かが私の契約を故意に覆そうとするなら、それは彼ら次第です。