Csharp/CSharp Tutorial/delegate/delegate parameter — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
(нет различий)
|
Текущая версия на 15:19, 26 мая 2010
Use delegate as the function parameter
<source lang="csharp">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); }
}</source>
3
Using a delegate to choose the right function to call.
<source lang="csharp">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]); }
}</source>