关于委托与事件,高分求解
1、为什么标注的地方两种写法都可以?有什么区别没?public delegate void EventHandler(object sender, EventArgs e);为系统定义的借口,有2个参数,
为什么在NewTimer.Tick += new EventHandler(CheckMessage);这里只有一个,是方法名??
(委托时把方法名当做参数传递,这里还是看不懂是怎么传递的)而方法的两个参数和接口两个参数是对应的。
protected void Time()
{
Timer NewTimer = new Timer();
NewTimer.Enabled = true;
NewTimer.Interval = 100;
NewTimer.Start();
//这两种写法都可以, 有啥区别??
//NewTimer.Tick += CheckMessage;
NewTimer.Tick += new EventHandler(CheckMessage);
}
private void CheckMessage(object source,EventArgs e)
{
j++;
if (j == 20)
this.Close();
}
2、
public class Class2
{
public static string str1;
public static string str2;
private static void EnglishGreeting(string name)
{
str1 = "Moring" + name;
}
private static void ChineseGreeting(string name)
{
str2 = "早上好, " + name;
}
public void Main()
{
GreetingManager GMa = new GreetingManager();
GMa.GD1 += EnglishGreeting;
GMa.GD1 += ChineseGreeting;
GMa.GreetPeople("Jimmya");
}
}
public class GreetingManager
{
//为什么委托名和事件必须一样??GreetDelegate
public delegate void GreetDelegate(string name);
public event GreetDelegate GD1;
public void GreetPeople(string name)
{
if (GD1 != null)
{
GD1(name);
}
}
}
上面红色两句是 自定义委托和事件,为什么必须一样都是GreetDelegate??
GMa.GD1 += EnglishGreeting;
GMa.GD1 += ChineseGreeting;
GD1是事件啊,这里到底是调用委托还是事件(考虑委托定义,是将方法绑定在委托上吗)?难道类似于实例化类的时候同时调用构造方法,有一指二的意思??
期待高手解释,闯过委托和事件这一关,感激不尽!!!