Using a delegate to choose the right function to call. : delegate parameter « delegate « C# / CSharp Tutorial






using System;
using System.Collections;

public delegate bool HandleKeyword(string key);

public class Parser {
    Hashtable parseTable;

    public Parser() {
        parseTable = new Hashtable();
    }

    public void AddKeywordHandler(string key, HandleKeyword handler) {
        parseTable.Add(key, handler);
    }

    public bool ParseKeyword(string key) {
        HandleKeyword func = (HandleKeyword)parseTable[key];
        if (func == null)
            return false;

        return func(key);
    }
}

public class HandleHello {
    public static bool HandleIt(string s) {
        Console.WriteLine("HandleHello::HandleIt {0}", s);
        return true;
    }
}

public class HandleGoodbye {
    public static bool HandleIt(string s) {
        Console.WriteLine("HandleGoodbye::HandleIt {0}", s);
        return true;
    }
}

public class HandleWhy {
    public static bool HandleIt(string s) {
        Console.WriteLine("HandleWhy::HandleIt {0}", s);
        return true;
    }
}

class MainClass {
    public static void Main(string[] args) {
        Parser p = new Parser();

        p.AddKeywordHandler("hello", new HandleKeyword(HandleHello.HandleIt));
        p.AddKeywordHandler("goodbye", new HandleKeyword(HandleGoodbye.HandleIt));
        p.AddKeywordHandler("why", new HandleKeyword(HandleWhy.HandleIt));
        for (int i = 0; i < args.Length; ++i)
            if (p.ParseKeyword(args[i]) == false)
                Console.WriteLine("Unknown keyword {0}", args[i]);
    }
}








9.6.delegate parameter
9.6.1.Use delegate as the function parameter
9.6.2.Using a delegate to choose the right function to call.