メソッドへのアクセスをデリゲートとしてのみ渡され、実行されないようにする方法は?

GKman

アクセスをデリゲートとしてのみ渡し、それ以外の方法では実行しないようにしたいプライベートメソッドがあります。

例えば:

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列挙型の可能な値としてを。クラスでADictionary<MethodOfA, MyDelegate> methodDict各列挙値が対応するものを記録するプライベート宣言します。次にmyMethod、次のMethodOfAような別のオーバーロードを宣言します

public static int myMethod(int data, MethodOfA action) 
    => myMethod(data, methodDict[action]);

それにもかかわらず、これは私には悪いデザインのように見えます。myMethod(int, MyDelegate)そもそものオーバーロードは必要ないかもしれません。列挙型をチェックするだけで、対応するアクションを実行できます。あなたが試みるかもしれない他のことは戦略パターンです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

そのようなメソッドを持たない親クラスのオブジェクトとして格納されている場合、クラスのメンバーにアクセスするにはどうすればよいですか?

分類Dev

Pythonスクリプトの実行中にpylintを実行して、pylintがコードを渡すとコードが実行され、そうでない場合はpylintエラーが表示されるようにすることはできますか?

分類Dev

メソッド(複数のメソッド)をパラメーターとして継承されたvoidメソッドまたはC#のデリゲートに渡すにはどうすればよいですか?

分類Dev

jsonで解析されたデータを最初の実行時にのみロードする方法は、タブをクリックするとリストビューに既に入力されているのでしょうか?

分類Dev

ディレクトリを引数として1つのコマンドを実行し、同じコマンドにcdする方法は?「そのようなファイルやディレクトリはありません」というメッセージが表示されます

分類Dev

ホワイトリストに登録されたリソース(スクリプト、ピクセルなど)のみをサンドボックス化されたiframe内で実行できるようにする方法は?

分類Dev

新しいネットワークに移動され、新しいネットワークでデフォルトでパブリックに設定されている非ドメインWindowsヘッドレスサーバーへのRDPアクセスを取得するにはどうすればよいですか?

分類Dev

UITableViewDataSourceのようなカスタムデリゲートメソッドを迅速に実行するにはどうすればよいですか?

分類Dev

デバッグが実行されてもリリースがビルドされないのはなぜですか。同じソースファイルを使用しているプロジェクトの1つに対してのみです。

分類Dev

メソッドにパラメーターとして渡されたときにデリゲートが機能しないのはなぜですか?

分類Dev

Updateメソッドのifステートメントを使用して、XNA C#で既に実行されているゲームのウィンドウに新しいイメージを追加するにはどうすればよいですか?

分類Dev

ボタンクリックにメソッドをアタッチしようとすると、このエラーメッセージが表示されるのはなぜですか?btnSalvaNota_Click一致デリゲート 'EventHandler'のオーバーロードなし

分類Dev

MethodInvokingJobDetailFactoryBeanとして実行されているメソッドにデータを渡すにはどうすればよいですか?

分類Dev

Ubuntu 16.04LTSホストで実行されているVirtualBox6.0.24のゲストとしてUbuntu20.10を使用しているときに、クリップボードとドラッグアンドドロップを有効にするにはどうすればよいですか?

分類Dev

静的メソッドが複数のサーブレットスレッドによって同時にアクセスされないようにする方法

分類Dev

3000とは異なるポートをリッスンしているDockerコンテナで実行されるRailsアプリへのアクセス

分類Dev

アプリが開いて実行されている場合にのみ、バックグラウンドでメソッドを実行する方法は?

分類Dev

アプリが開いて実行されている場合にのみ、バックグラウンドでメソッドを実行する方法は?

分類Dev

アプリが開いて実行されている場合にのみ、バックグラウンドでメソッドを実行する方法は?

分類Dev

Pythonを使用してディレクトリAPIにアクセスしようとしているときに、このリソース/ APIにアクセスすることを許可されていないサービスアカウント

分類Dev

Eclipse subversiveプラグインを使用してコミットしようとすると、「CHECKOUTはバージョンリソースでのみ実行できます」というメッセージが表示されます

分類Dev

反映されたメソッドをパラメーターとして別の反映されたメソッドにデリゲートとして渡す

分類Dev

外部の電子メールユーザーに対してOutlookのアクション可能なメッセージを実行すると、「ターゲットURL ...は許可されていません」というエラーメッセージが表示されます

分類Dev

Oracle Javaアップデートに早期アクセスして、RIAをテストして、これらのアップデートが公開されたときにファイアドリルが発生しないようにするにはどうすればよいですか?

分類Dev

Javaを使用してExcelシートから特定の列名(引数として渡される)の最後の空でないセルの行インデックスを取得するにはどうすればよいですか?

分類Dev

mockitoテストは、junitテストとして実行したときにそのようなメソッドエラーを発生させませんが、実行設定でjarを手動で追加すると、うまく実行されます

分類Dev

ボックスAPIでアクセストークンの有効期限が切れていることをどのように認識できますか?デリゲートメソッドはありますか?

分類Dev

C#のデリゲートに相当するJava(実行するさまざまなクラスのメソッドをキューに入れる)

分類Dev

メソッドパラメータとしてまだ実装されていないインターフェイスを使用するクラスでJUnitテストを実行するにはどうすればよいですか?

Related 関連記事

  1. 1

    そのようなメソッドを持たない親クラスのオブジェクトとして格納されている場合、クラスのメンバーにアクセスするにはどうすればよいですか?

  2. 2

    Pythonスクリプトの実行中にpylintを実行して、pylintがコードを渡すとコードが実行され、そうでない場合はpylintエラーが表示されるようにすることはできますか?

  3. 3

    メソッド(複数のメソッド)をパラメーターとして継承されたvoidメソッドまたはC#のデリゲートに渡すにはどうすればよいですか?

  4. 4

    jsonで解析されたデータを最初の実行時にのみロードする方法は、タブをクリックするとリストビューに既に入力されているのでしょうか?

  5. 5

    ディレクトリを引数として1つのコマンドを実行し、同じコマンドにcdする方法は?「そのようなファイルやディレクトリはありません」というメッセージが表示されます

  6. 6

    ホワイトリストに登録されたリソース(スクリプト、ピクセルなど)のみをサンドボックス化されたiframe内で実行できるようにする方法は?

  7. 7

    新しいネットワークに移動され、新しいネットワークでデフォルトでパブリックに設定されている非ドメインWindowsヘッドレスサーバーへのRDPアクセスを取得するにはどうすればよいですか?

  8. 8

    UITableViewDataSourceのようなカスタムデリゲートメソッドを迅速に実行するにはどうすればよいですか?

  9. 9

    デバッグが実行されてもリリースがビルドされないのはなぜですか。同じソースファイルを使用しているプロジェクトの1つに対してのみです。

  10. 10

    メソッドにパラメーターとして渡されたときにデリゲートが機能しないのはなぜですか?

  11. 11

    Updateメソッドのifステートメントを使用して、XNA C#で既に実行されているゲームのウィンドウに新しいイメージを追加するにはどうすればよいですか?

  12. 12

    ボタンクリックにメソッドをアタッチしようとすると、このエラーメッセージが表示されるのはなぜですか?btnSalvaNota_Click一致デリゲート 'EventHandler'のオーバーロードなし

  13. 13

    MethodInvokingJobDetailFactoryBeanとして実行されているメソッドにデータを渡すにはどうすればよいですか?

  14. 14

    Ubuntu 16.04LTSホストで実行されているVirtualBox6.0.24のゲストとしてUbuntu20.10を使用しているときに、クリップボードとドラッグアンドドロップを有効にするにはどうすればよいですか?

  15. 15

    静的メソッドが複数のサーブレットスレッドによって同時にアクセスされないようにする方法

  16. 16

    3000とは異なるポートをリッスンしているDockerコンテナで実行されるRailsアプリへのアクセス

  17. 17

    アプリが開いて実行されている場合にのみ、バックグラウンドでメソッドを実行する方法は?

  18. 18

    アプリが開いて実行されている場合にのみ、バックグラウンドでメソッドを実行する方法は?

  19. 19

    アプリが開いて実行されている場合にのみ、バックグラウンドでメソッドを実行する方法は?

  20. 20

    Pythonを使用してディレクトリAPIにアクセスしようとしているときに、このリソース/ APIにアクセスすることを許可されていないサービスアカウント

  21. 21

    Eclipse subversiveプラグインを使用してコミットしようとすると、「CHECKOUTはバージョンリソースでのみ実行できます」というメッセージが表示されます

  22. 22

    反映されたメソッドをパラメーターとして別の反映されたメソッドにデリゲートとして渡す

  23. 23

    外部の電子メールユーザーに対してOutlookのアクション可能なメッセージを実行すると、「ターゲットURL ...は許可されていません」というエラーメッセージが表示されます

  24. 24

    Oracle Javaアップデートに早期アクセスして、RIAをテストして、これらのアップデートが公開されたときにファイアドリルが発生しないようにするにはどうすればよいですか?

  25. 25

    Javaを使用してExcelシートから特定の列名(引数として渡される)の最後の空でないセルの行インデックスを取得するにはどうすればよいですか?

  26. 26

    mockitoテストは、junitテストとして実行したときにそのようなメソッドエラーを発生させませんが、実行設定でjarを手動で追加すると、うまく実行されます

  27. 27

    ボックスAPIでアクセストークンの有効期限が切れていることをどのように認識できますか?デリゲートメソッドはありますか?

  28. 28

    C#のデリゲートに相当するJava(実行するさまざまなクラスのメソッドをキューに入れる)

  29. 29

    メソッドパラメータとしてまだ実装されていないインターフェイスを使用するクラスでJUnitテストを実行するにはどうすればよいですか?

ホットタグ

アーカイブ