デリゲートを取るクラスがあるとしましょう:
public class DelegateContainer
{
private IDelegate delegate;
public DelegateContainer(IDelegate delegate)
{
this.delegate = delegate;
}
public void doSomething()
{
delegate.doSomethingOnlyForThisPurpose();
}
{
ご覧のとおり、デリゲートの doSomethingOnlyForThisPurpose() メソッドは、デリゲート クラスによって呼び出されるためにのみ存在します。ただし、このメソッドはパブリックであり、何からでも実行できる必要があります。アタッチされている委任クラス以外によって絶対に実行されるべきではない場合 (特に、委任クラスが依存関係で渡される場合)、これはカプセル化を破りませんか? これを回避するために私が考えた唯一の方法は、呼び出されたすべてのメソッドに渡される委譲クラス (内部クラス) によってのみインスタンス化できるオブジェクトを考案することです。ただし、これは非常に複雑で、とにかく完全ではありません。これを回避する方法はありますか、それとも病理学的ですか?
注: この合成アプローチに固執したいので、継承には頼りません。