プログラミングでアイデアを具現化したい

あらゆるものを具現化するためにプログラミングを始めました。主にC#

デリゲート


独習C# 第3版より

デリゲート宣言構文
f:id:tos5511:20160110025850j:plain
戻り値の型には、デリゲートが呼び出すメソッドの戻り値の型を指定します。
デリゲートが呼び出すメソッドの引数は仮引数に指定します。
デリゲートから呼び出すことが出来るメソッドは戻り値、引数が
デリゲート宣言と一致しているメソッドに限られる。

// 簡単なデリゲートの例
using System;

// StrModというデリゲートの宣言 
delegate string StrMod(string str);

class DelegateTest {
    // スペースをハイフンで置き換える
    static string ReplaceSpaces(string a) {
        return a.Replace(' ', '-');
    }

    // 文字列の並びを逆転させる
    static string Reverse(string a) {
        string temp = "";
        int i, j;
        for (j = 0, i = a.Length - 1; i >= 0; i--, j++)
            temp += a[i];
        return temp;
    }

    static void Main() {
        //デリゲートのインスタンスを作成する
        StrMod strOp; 
        string str = "デ リ ゲ ー ト の テ ス ト";

        strOp = ReplaceSpaces;
        str = strOp(str);
        Console.WriteLine(str);

        strOp = Reverse;
        str = strOp(str);
        Console.WriteLine(str);
    }
}

実行結果
f:id:tos5511:20160110033455j:plain

上記コードの説明。
sreing型の引数、string型の返り値を返すデリゲートStrModを宣言。
Main()メソッド内でStrMod型の参照変数、strOpを宣言し
デリゲートインスタンスであるstrOpを介してReplaceSpaces(string a)、
Reverse(string a)を呼び出しています。


追記
インスタンスメソッドも呼び出すパターン追加しておきます

// 簡単なデリゲートの例
using System;

// StrModというデリゲートの宣言 
delegate string StrMod(string str);

class DelegateTest {
    // スペースをハイフンで置き換える
    static string ReplaceSpaces(string a) {
        return a.Replace(' ', '-');
    }

    // 文字列の並びを逆転させる
    static string Reverse(string a) {
        string temp = "";
        int i, j;
        for (j = 0, i = a.Length - 1; i >= 0; i--, j++)
            temp += a[i];
        return temp;
    }

    static void Main() {
        //デリゲートのインスタンスを作成する
        StrMod strOp;
        var ts = new Test();
        string str = "デ リ ゲ ー ト の テ ス ト";
        string str1 = "デ リ ゲ ー ト の テ ス ト";

        //インスタンスメソッドを呼び出す
        strOp = ts.tes;
        str = strOp(str);
        Console.WriteLine(str);

        strOp = Reverse;
        str1 = strOp(str1);
        Console.WriteLine(str1);

        strOp = ReplaceSpaces;
        str1 = strOp(str1);
        Console.WriteLine(str1);

    }
    
}
class Test{
    public string tes(string a) {
        return a.Replace(" ", "");
    }
            
}

実行結果
f:id:tos5511:20160110045201j:plain