委托的构成必须满足的4个条件:
委托包装的方法需要满足以下条件
示例一:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleAppDelegate
{
class Program
{
//1、使用delegate关键字来定义一个委托类型
delegate void MyDelegate(int parm1, int parm2);
static void Main(string[] args)
{
//2、声明委托变量d
MyDelegate d;
//3、实例化委托类型,传递的方法也可以为静态方法,这里传递的是实例方法
d = new MyDelegate(new Program().Add);
//4、委托类型作为参数传递给另一个方法
MyMethod(d);
Console.Read();
}
//该方法的定义必须与委托定义相同,即返回类型void,两个int类型的参数
void Add(int parm1,int parm2)
{
int sum = parm1 + parm2;
Console.WriteLine("两个数的和为:"+sum);
}
//方法的参数是委托类型
private static void MyMethod(MyDelegate mydelegate)
{
//5、在方法中调用委托
//mydelegate.Invoke(1, 2);
mydelegate.Invoke(1, 2);
}
}
}
示例二:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleAppDelegateGreeting { class Program { static void Main(string[] args) { Program p = new Program(); p.Greeting("苍井空",p.ChineseGreeting); p.Greeting("Tommy Li", p.EnglishGreeting); Console.Read(); } //定义委托类型 public delegate void GreetingDelegate(string name); //有了委托之后可以像下面这样实现打招呼方法 public void Greeting(string name,GreetingDelegate callback) { //调用委托 callback(name); } //美国人打招呼方法 public void EnglishGreeting(string name) { Console.WriteLine("Hello, " + name); } //中国人打招呼方法 public void ChineseGreeting(string name) { Console.WriteLine("你好, " + name); } } }
总结:
原文:http://www.cnblogs.com/wazalf/p/delegate.html