アクセスをデリゲートとしてのみ渡し、それ以外の方法では実行しないようにしたいプライベートメソッドがあります。
例えば:
class a
{
public delegate int myDelegate(int a);
public static int myMethod(int data, myDelegate action)
{
//my code
}
private static int methodA(int a){ //code}
private static int methodb(int a){ //code}
}
class b
{
public void anotherMethod()
{
var doAction = new myDelegate(methodA);
result = myMethod(8, doAction);
}
}
したがって、私の例では、methodAとMethodBをクラスa内からのみ実行し、それらへのアクセスを有効にして、クラスaからメソッドに渡されるデリゲートとして使用できるようにします。
それは可能ですか?現在、「保護レベルが原因でmethodAにアクセスできません」というエラーが表示されます。
あなたが言っていることは不可能です。クラスにデリゲートのインスタンスがあると、誰もそれを呼び出すのを止めることはできません。したがって、クラスB
がデリゲートをに渡すことができたmyMethod
場合methodA
、有用なことを行うために知ってmethodB
いるだけの特別なパラメータが必要な場合を除いて、そのデリゲートを直接呼び出すこともできますA
。
似た何かを行う1つの方法は、何かのように呼ばれる列挙型を作成することであるMethodOfA
と宣言MethodA
し、MethodB
列挙型の可能な値としてを。クラスでA
、Dictionary<MethodOfA, MyDelegate> methodDict
各列挙値が対応するものを記録するプライベートを宣言します。次にmyMethod
、次のMethodOfA
ような別のオーバーロードを宣言します。
public static int myMethod(int data, MethodOfA action)
=> myMethod(data, methodDict[action]);
それにもかかわらず、これは私には悪いデザインのように見えます。myMethod(int, MyDelegate)
そもそものオーバーロードは必要ないかもしれません。列挙型をチェックするだけで、対応するアクションを実行できます。あなたが試みるかもしれない他のことは戦略パターンです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加