Delegate Introduction
Demo1 Delegate
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleDelegate
{
class DelegateDemo
{
//申明一个返回类型是void,有一个String类型参数的delegete类。
public delegate void GreetingDelegate(string name);
//定义一个方法,该方法的第一个参数是delegate的参数。第二个参数为函数。
//该方法实现了将函数作为参数。
public void Greeting(string name,GreetingDelegate callback)
{
callback.Invoke(name);
}
public void EnglishGreeting(string name)
{
Console.WriteLine("Hello," + name);
}
public void ChineseGreeting(string name)
{
Console.WriteLine("你好," + name);
}
static void Main(string[] args)
{
DelegateDemo p = new DelegateDemo();
//第一个参数为EnglishGreeting的参数值,第二个参数将EnglishGreeting函数变为参数.
p.Greeting("Daniel", p.EnglishGreeting);
p.Greeting("阿甘", p.ChineseGreeting);
Console.Read();
}
}
}
Demo2 DelegateChain
using System;
namespace DelegateChain
{
class Program
{
static void Main(string[] args)
{
//一个委托对应多个类型相同的方法
var m1 = new DelegateDemo(method1);
var m2 = new DelegateDemo(method2);
//定义委托对象,不包含方法。
DelegateDemo delegateChain = null;
//向委托对象中添加委托,添加多个委托,则形成委托链。
delegateChain += m1;//Add m1
delegateChain += m2;
delegateChain -= m1;//Remove m1
delegateChain();//调用委托链
Console.Read();
}
private static void method1()
{
Console.WriteLine("method1");
}
private static void method2()
{
Console.WriteLine("method2");
}
public delegate void DelegateDemo();
}
}