Csharp/CSharp Tutorial/delegate/delegate parameter

Материал из .Net Framework эксперт
Версия от 12:19, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Use delegate as the function parameter

using System;
using System.Collections.Generic;
using System.Reflection;
using System.Runtime.InteropServices;
delegate void FooBar();
public class MainClass
{
    static void Invoke3Times(FooBar d)
    {
        d(); d(); d();
    }
   public static void Main(){
        int i = 0;
        Invoke3Times(delegate { i++; });
        Console.WriteLine(i);
   }
}
3

Using a delegate to choose the right function to call.

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]);
    }
}