LoginSignup
1
2

More than 3 years have passed since last update.

【C#】【文法】デリゲード,ラムダ式

Last updated at Posted at 2019-10-03

delegate : 関数を変数に保持するための定義。
匿名メソッド : deletgateの関数を変数に代入する手間を省き直接定義できるように。
ラムダ式 : 匿名メソッドをもっとシンプルに定義できるように。


// デリゲート
    class Practice10_1
    {

        // デリゲート (Cでいう関数ポインタのようなもの)
        // 戻り値と型が同じなら代入できる。
        delegate void EventPart(string s);

        static void Main(string[] args)
        {
            // デリゲード
            Show1();

            // 匿名メソッド
            Show2(delegate(string name) { Console.WriteLine(name + "エフェクトを発生させる。"); });

            // ラムダ式
            Show2((String name) => Console.WriteLine("name + エフェクト発生"));
        }

        // デリゲード
        static void Show1()
        {
            EventPart eventParts;
            var eventManager = new EventManager();

            // 複数のメソッドを登録する。
            eventParts = eventManager.Wait;
            eventParts += eventManager.Action1;
            eventParts += new EventPart(eventManager.Action2); // new演算子を使った書き方も可

            // 追加した全てのメソッドを実行する。
            eventParts("");

            // 削除もできる。
            eventParts -= eventManager.Action1;

            eventParts("");
        }

        // 匿名メソッド
        static void Show2(Action<string> action)
        {
            action("");
        }

    }

    class EventManager
    {
        public void Action1(string name)
        {
            Console.WriteLine(name + ":文字を表示する。");
        }
        public void Action2(string name)
        {
            Console.WriteLine(name + "キャラクターを移動させる。");
        }
        public void Wait(string name)
        {
            Console.WriteLine(name + "待ち時間");
        }
    }
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2