オブジェクトの作成を特定のクラスのメソッドに限定することはできますか?オブジェクトの作成を特定のクラスのメソッドに限定する方法はありますか?
はexempleの場合:私は、クラスのトランザクションを持っている、と私はそれがAbstractServiceまたはIServiceから継承する任意のクラスのメソッドにオブジェクト作成制限したいと思います:
可シナリオ:
public class ServiceA : AbstractService (or IService)
{
public void MethodA()
{
var transaction = new Transaction();
}
public void MethodB()
{
var transaction = new Transaction();
}
}
禁止シナリオ:
public class ServiceB
{
public void MethodA()
{
var transaction = new Transaction(); // cannot create
}
public void MethodB()
{
var transaction = new Transaction(); // cannot create
}
}
ありアクセス修飾子などのシナリオをマウントすることができますか?
'ServiceA'が' Transaction'と同じアセンブリにあり、 'ServiceB'とは別のアセンブリにある場合、' Transaction''のためのコンストラクタを 'internal'にすることができます。そうでなければ、それを 'private'にしてリフレクションを使ってインスタンスを作成し、他のクラスが例外をスローしてインスタンスを作成することを禁止することができます。私はそれがあなたができる最高だと思う。 –
ソートの答え:いいえ。 – Jamiec
これをどのように実装すればよいかをエレガントに考えることはできません。汚れたハックは実際に 'Transaction'のコンストラクタの' StackFrame'をチェックすることでしょう。しかし実際にはここでは間違ったデザインの決定をしていると思いますが、実際にあなたが達成しようとしていることを知らないと決定できません。なぜあなたはそれをしたいのですか?そして、 'ServiceA.MethodA()'が 'ServiceB.MethodA'を呼び出して' Transaction'を生成すると合法でしょうか?または、「ServiceA」からの「直接」コールのみですか?コンパイラ最適化後の "直接"の意味 –