c# +=运算符 是什么意思 比如这个是什么意思

namespace 关于一杯水的委托
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
IDrink mydrink = new IDrink("凉开水", "");
mydrink.Idrink += new IDrink.Drink(wateronly); //这个 +=是什么意思
mydrink.execu();
}

private void wateronly(string water, string mainthing)
{
MessageBox.Show("你喝了" + water);
MessageBox.Show("你加了" + mainthing);
}

}
}

namespace 关于一杯水的委托
{
class IDrink
{
public string _water = "";
public string _mainthing = "";

public delegate void Drink(string water, string mainthing);
public Drink Idrink = null;
public IDrink(string water, string mainthing)
{
_water = water;
_mainthing = mainthing;

}
public void execu()
{
MessageBox.Show("取出杯子");
Idrink(_water, _mainthing);
MessageBox.Show("享用中");
MessageBox.Show("清洗并归放原位");

}
}
}

“+=”在这里是被重载过的操作符,作用就是将一个委托实例添加(注册)到事件列表中。可以把事件列表当作一个“委托链”或“委托列表”来看待。当事件发生时,就会通过在此“委托列表”中注册的这些委托实例来调用相应的方法,从而就会实现“事件通知”这样的功能。其实这就是“观察者模式”在C#中的实现方式。
  至于“委托链”,程序员一般不需要关心C#是如何做到这一点的。如果对其实现方式有兴趣,可以参考java中事件的实现方式,但是不推荐这样做——因为在java中你得手工实现事件列表;而且java中没有委托,是使用接口来实现事件的,初学者可能需要晕个两三天才能看明白,反而不利于C#学习。
  另,C#中的术语可能有些易混淆的地方,比如“委托”,既可以指委托类,也可以指委托类生成的一个实例。
  在委托类的实例中包含了个方法的引用——相当于方法的一个标签,这个标签中包含了对方法调用的一些限制,以防止调用方法时意外出错;而且还可以将这些“标签”作为参数传来传去,便于方法的调用。
  以“委托实例名(参数1,参数2)”的语法调用方法时,实际上就是调用“委托实例中引用的方法(参数1,参数2)”。
===================================================
编译器会根据事件来自动推断委托类型并实例化相应的委托类,因此:
mydrink.Idrink += new IDrink.Drink(wateronly);
上面这行代码写成:
mydrink.Idrink += wateronly;
这个样子也是可行的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-03
利用委托给它注册一个事件
相似回答
大家正在搜