事件

/*
事件
定义事件需要用委托类型的去声明一个事件。
*/
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;
		}
	}
}

  

posted on 2013-11-29 16:54  wp456  阅读(205)  评论(0)    收藏  举报

导航