Csharp/CSharp Tutorial/delegate/delegate parameter — различия между версиями

Материал из .Net Framework эксперт
Перейти к: навигация, поиск
м (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>