カテゴリー
C

独習C#第3版、P443 デリゲート、マルチキャスト

// マルチキャストのデモ

using System;
namespace Chapter01All
{
    // デリゲートの宣言
    delegate void StrMod(ref string str);

    class StringOps
    {
        // スペースをハイフンで置き換える
        public void ReplaceSpaces(ref string a)
        {
            Console.WriteLine("Replaces spaces with hyphens.");
            a = a.Replace(' ', '-');
        }
        public void ReplaceHyhoens(ref string a)
        {
            Console.WriteLine("Replaces hyphens with space");
            a = a.Replace('-', ' ');
        }

        // スペースを取り除く
        public void RemoveSpaces(ref string a)
        {
            string temp = "";
            int i;

            Console.WriteLine("Removing spaces.");
            for (i = 0; i < a.Length; i++)
                if (a[i] != ' ') temp += a[i];

            a = temp;
        }

        // 文字列の並びを逆転させる
        public void Reverse(ref string a)
        {
            string temp = "";
            int i, j;

            Console.WriteLine("Reversing string.");
            for (j = 0, i = a.Length - 1; i >= 0; i--, j++)
                temp += a[i];

            a = temp;
        }

        static void Main()
        {
            StringOps obj = new StringOps();
            // デリゲートの作成
            StrMod strOp;
            StrMod replaceSp = obj.ReplaceSpaces;
            StrMod removeSp = obj.RemoveSpaces;
            StrMod reverseStr = obj.Reverse;
            StrMod replacePyhoens = obj.ReplaceHyhoens;

            string str = "This is a test";
            strOp = replaceSp;
            strOp(ref str);
            Console.WriteLine(str + "\n");  //spを-に置き換える

//          strOp -= replaceSp;            
            strOp += reverseStr;
            strOp(ref str);
            Console.WriteLine(str + "\n");  //This-is-a-testを逆文字列にする

            strOp += replacePyhoens;        //再度逆文字列にするので元に戻る。-をspに変える。
            strOp(ref str);
            Console.WriteLine(str + "\n");
/*          以下のコメントアウトは最後以外は本の通りです。
            str = "This is a test.";
            strOp = replaceSp;
            strOp(ref str);
            Console.WriteLine(str + "\n");     //spを-に変える

            // マルチキャストの準備
            strOp = replaceSp;
            strOp += reverseStr; //←マルチキャストを作成する
            // マルチキャストの呼び出し
            str = "This is a test.";
            strOp(ref str);
            Console.WriteLine("Resulting string: " + str);
            Console.WriteLine();    //spaceを-に変えて、逆の文字列にする

            // 置き換えのメソッドを取り除き、スペース削除のメソッドを追加する
            str = "This is a test.";
            strOp = replaceSp;
            strOp += removeSp; //←別のマルチキャストを作成する
            strOp(ref str);
            Console.WriteLine(str + "\n");

            str = "This is a test."; // 文字列を再度設定する

            // マルチキャストの呼び出し
            strOp(ref str);         //文字列を逆にしてから、spを取る
            Console.WriteLine("Resulting string: " + str);
            Console.WriteLine();

            str = "This-is-a-test.";
            strOp = replacePyhoens;
            strOp(ref str);
            Console.WriteLine(str);
*/
        }
    }
}

 本の例題の通り、打ち込んでは見たけれど、少し分かり辛い。実行部分のコメントアウトは、大体本の通り。実行部分の最初を追加しました。例文のスペースをハイフンに変えて、文字列を逆にする。ハイフンをスペースに変えるのを追加して、再度文字列を逆にすると、元に戻る。マルチキャストは加えていくとそのまま残ってますので、スペースを置き換える手順等が残っていても、一度置き換えると、何度行っても何も起こらないことにはなるようです。文字列を逆にするのは、二回行うと元に戻ることになりますね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

inserted by FC2 system