Материал из .Net Framework эксперт
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
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]);
}
}