您的位置:首页 > 其它

委托和事件

2015-12-17 20:15 369 查看
委托和事件应用非常广泛,但对于接触C#不长的人来说并不容易。他就像一道门槛,过了这个槛的人觉得真的是太容易了;但很多人过这到槛都只能过一半。今天我就跟大家来分享下我对于委托和事件的看法。

声明一个委托很简单只要加上delegate关键字就可以声明委托,下面是无参委托和有参委托的声明

public delegate void FrisDelegate();

public delegate void ToDelegate(int a ,int b);

虽然声明一个委托很简单,但是我们要怎么去用他呢?下面我们先来看一个例子:

public class A

{

public void GetDelegate(EntrustDelegate buyEgg)

{

if(buyEgg!=null)

buyEgg();

}

}

public class B

{

public static void buyEggA()

{

Console.WriteLine("A去买");

}

public static void buyEggB()

{

Console.WriteLine("B去买");

}

}

public delegate void EntrustDelegate();

class D

{

static void Main(string []args)

{

EntrustDelegate a1,b2;

A a=new A();

a1=B.buyEggA;

b2=B.buyEggB;

a.GetDelegate(a1);

a.GetDelegate(b2);

Console.Read();

}

}

输出结果:

A去买

B去买

以上就是委托的用法,但我们还能不能优化呢?因为每绑定一个方法就要声明一个事件这样会很麻烦。

答案是可以的,下面我们就来看看优化后的代码:

public class A
{
public delegate void EntrustDelegate();
public event EntrustDelegate buyEgg;
public void GetDelegate()
{
if (buyEgg != null)
buyEgg();
}

}

public class B
{
public static void buyEggA()
{
Console.WriteLine("A去买");
}

public static void buyEggB()
{
Console.WriteLine("B去买");
}
}

class D
{
static void Main(string[] args)
{
A a = new A();
B b = new B();
a.buyEgg += B.buyEggA;
a.buyEgg += B.buyEggB;
a.GetDelegate();

a.buyEgg -= B.buyEggB;

a.GetDelegate();
Console.Read();
}

}

输出结果:

A去买

B去买

A去买

优化后的代码确实简结多了,但是“+=”有什么作用为什么不是用“=”呢?"-="又是干嘛?

“+=”是给事件注册方法,而“-=”是取消注册;而之所以不用“=”是因为我们把委托放在A类声明中用event声明了事件,所以我们注册事件时不能使用“=”。

如写的不对之处,欢迎指正!!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: