第一步你要明白什么是委托:
public class test
{
public delegate void del(string message); //声明一个委托
public static void entrust(string message)//声明一个委托方法,注意他的签名(返回值和参数个数参数类型)要正确
{//这是个静态方法
System.Console.Write(message); //该方法只是来显示一个字符串
}
public static void methodshow(int a, del ent) //这里将委托对象做为一个参数
{
ent("这是:"+a+"\n"); //使用委托方法来现实文字
}
static void Main()
{
del handler = entrust; //实例化一个委托(好像也叫注册一个委托 前面是del声明的委托后面跟委托方法)(静态方法)
// 对象中具有与委托签名相匹配的方法,委托就可以引用该对象
//所以我们可以给不同的对象注册不的委托方法
handler("hello\n"); //使用委托
methodshow(3, handler);
Methodclass Method = new Methodclass(); //实例一个对象
del handler2 = Method.Method1; //使用methodclass类里面的方法来注册这个委托(实例方法)
handler2("Asd");
System.Console.Write(handler2.GetInvocationList()+"\n");//查找派生与那个类
//显示委托创建对象属于delegate类也就可以使用delgate类的属性
}
}
public class Methodclass //这是为了试验委托可一调用别的类中方法,而不只是静态方法
{
public void Method1(string message) {
System.Console.Write("这里调用的是一个任意方法"+message+"\n");
}
}
委托函数就是为了管理方法存在的。如你只有一个方法你可以使用匿名方法来注册事件
第二步:开始写触发代码了:
using System;
public delegate void del(string message); //声明一个委托
public class test
{
public static void Method(string message)
{
Console.Write(message);
}
public event del eventname; // 声明一个事件并指向委托类型(del)
//事件就是用了激活委托,然后委托就调用适合他的方法
public void oneventname(string message) //这是定义触发事件函数
{//里面的参数要和委托里面参数类型和个数一致
if (eventname != null)
{//这里用这个是因为确保委托原形不为delete不为null
//也就是没注册时间就不触发了。
eventname(message);
}
}
}
public class test2
{
public static void Main()
{
test mm = new test();
mm.eventname += new del(test.Method); //通过委托将test.Method方法 注册到事件中
//移除事件mm.eventname -= new del(test.Method);
//接下来就是如何触发这个事件了,只要事件触发就会调用test.Method()方法来显示一个字符串
mm.oneventname("hello");
}
}
下面在看下匿名方法:
using System;
public delegate void del(string message); //声明一个委托
public class test
{
public static void Method(string message)
{
Console.Write(message);
}
public event del eventname; // 声明一个事件并指向委托类型(del)
//事件就是用了激活委托,然后委托就调用适合他的方法
public void oneventname(string message) //这是定义触发事件函数
{//里面的参数要和委托里面参数类型和个一致
//因为最后还要是传值给他的
eventname(message);
//事件只能在类里面写好触发函数,否则在外面不可用
}
}
public class test2
{
public static void Main()
{
test mm = new test();
mm.eventname += delegate(string message) { Console.Write(message); };
//这是一个匿名方法,没用到委托所以算匿名了
mm.oneventname("你好\n");
}
}