/*
事件
定义事件需要用委托类型的去声明一个事件。
*/
using System;
namespace Frank
{
public class Test
{
public delegate string Get(string x);//自定义委托
//简写模式的事件
public event Get NewEvent;//自从有了EventHandler泛型委托后就在也不需要自己定义委托了。它有两个参数,第一个是调用者,第二个是T类型。还定义了约束。
//完整模式的事件定义,类似于属性和字段。编译器自动的添加的。
/*
public event Get NewEvent2
{
add
{
Get += value;
}
remove
{
Get = value;
}
}*/
public delegate void Pr<T>() where T : struct;//创建一个泛型委托,然后定义约束。
public event EventHandler Event2;//系统系统的无返回值的委托。带两个参数
//程序入口
public static void Main(string[] args)
{
Test t = new Test();
t.NewEvent = t.Set;//为自定义委托类型的时间添加方法
t.ExecEvent("123");//执行自定义事件
t.Event2 = t.Methods;
t.Event2 += t.Methods;//给事件添加方法。也可以叠加,所以使用+=
t.Event2 -= t.Methods;//取消一个订阅
t.ExecEvent2();
}
public void ExecEvent(string str)
{
if(NewEvent!=null)
{
NewEvent(str);
}
}
public void ExecEvent2()
{
if(Event2!=null)
{
Event2(this,null);//执行事件
}
}
public void Methods(object t,EventArgs e)
{
Console.WriteLine("Hello!");
}
public string Set(string str)
{
Console.WriteLine(str);
return str;
}
}
}