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

デイブ

ケースバイケースで個別に呼び出すことができるように、他のvoidメソッドをパラメーターとして受け取るvoidメソッドを作成したいと思います。このメソッドは、voidメソッドを渡しながら名前で関数を呼び出すことができる子クラスからアクセスできます。

そのようです:

public class parent_class
{
    ...
    protected void like_an_action_delegate (Action/void function_a(), Action/void function_b(), ...)
    {
        if (condition_1)
        {
            function_a();
        }
        else if (condition_2)
        {
            function_a();
        }
            ...
        }
    }
}

//新しいスクリプト

public class child_class : parent_class
{
    Update ()
    {
        like_an_action_delegate (void_function_a(), void_function_b(), ...);
    }
    ...some void methods here...
}

ケースバイケースで言ったように、さまざまな関数を(キーボード上の)キーのセットにマップする関数を継承できるようにしたいので、これは重要です。

編集:パラメータを紹介してくれてありがとう、私はそれを学び、報告するつもりです。

隠された

これにはParamsキーワードを使用できます。

 public void MyMethodAggregate(params Action[] actions)
 {
      actions[someInt]();
      //do other conditional stuff
 }

別の選択肢は、{ Keys , Action }辞書の地図を渡すことかもしれません

public void ProcessKeyPress(Dictionary<KeyPressEnum,Action> actionMap)
{
    actionMap[theInternalKeyVariableYouHave]( );
}

これは、あなたが達成しようとしていることを示すためのより表現力豊かな方法かもしれません

子ごとにこれを実行しようとしている場合、通常使用する一般的に使用されるアクションのセットがある場合は、それらを親オブジェクトコンストラクターに渡す方がよい場合があります。そのactionMapに押されたキーに固有のものが含まれていない場合は、デフォルトを使用します。動作(ボタンが主に1つの目的で使用されるコンテキスト設定におそらく役立ちます)

public abstract class GameControlRequestProcessor
{
    private readonly Dictionary<KeyPressEnum, Action> _actionMap;
    private KeyPressEnum _lastKeyPressed;
    protected GameControlRequestProcessor(Dictionary<KeyPressEnum,Action> actionMap)
    { 
      _actionMap = actionMap;
    }

    protected abstract void Update( );
    protected void ProcessKeyPress(Dictionary<KeyPressEnum,Action> actionMap)
    {
      if(!actionMap.HasKey(_keyLastPressed))
      {
          if(_actionMap.HasKey(_keyLastPressed)) 
             _actionMap[keyLastPressed]();
          else 
          {
             //do something in the default case
          }
      }
      else 
        actionMap[_lastKeyPressed]();
    }
}

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

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

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ