クラスがあります
public class Foo{
public Foo{...}
private void someFunction(){...}
...
private Acessor{
new Acessor
}
}
いくつかのプライベート機能(someFunction)を使用します。ただし、別のクラスがFoo.SomeFunctionを呼び出せるようにしたい場合があるので、内部クラスにFooにアクセスして、それを渡します。
public class Foo{
public Foo{...}
private void someFunction(){...}
...
public Acessor{
Foo _myFoo;
new Acessor(Foo foo){_myFoo = foo;}
public void someFunction(){
_myFoo.someFunction();
}
}
}
このコードを使用すると、FooにsomeFunctionを呼び出す権限を他の人に与えたい場合、Fooは新しいFoo.Accessor(this)を渡すことができます。
残念ながら、このコードを使用すると、誰でもFooで開始されるFoo.Accessorを作成でき、someFunctionにアクセスできます。私たちはそれを望んでいません。ただし、Foo.Accessorをプライベートにすると、Fooから渡すことはできません。
今の私の解決策は、Acessorをプライベートクラスにして、パブリックインターフェイスIFooAccessorを実装させることです。次に、Foo.AccessorをIFooAccessorとして渡します。これは機能しますが、Foo.AccessorがIFooAccessorで余分な時間を使用するすべてのメソッドを宣言する必要があることを意味します。したがって、このメソッドのシグネチャをリファクタリングする場合(たとえば、someFunctionにパラメーターを取得させるなど)、3か所で変更を導入する必要があります。私はこれを数回しなければならなかった、そしてそれは本当に私を悩ませ始めている。もっと良い方法はありますか?