C# EventHandler 委托不使用继承EventArgs约定参数为嘛不会报错?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EventTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("多播委托");
Action<string> Delegete = Method1;
Delegete += Method2;
Delegete += Method1;
Delegete += Method1;
Delegete -= Method2;
Console.WriteLine("Start");
Delegete("Test");
ReleaseEvent GTAYY = new ReleaseEvent();
MonitorEvent YiYin = new MonitorEvent("YiYin");
MonitorEvent Niok = new MonitorEvent("Niok");
MonitorEvent JoeZhao = new MonitorEvent("JonZhao");
GTAYY.Event += YiYin.Event;
GTAYY.Event += Niok.Event;
GTAYY.Event += JoeZhao.Event;
GTAYY.TriggerEvent("BBS SB");
GTAYY.Event -= YiYin.Event;
GTAYY.TriggerEvent("ABS ACC");
Console.ReadLine();
}
public static void Method1(string text)
{
Console.WriteLine("Method 1 = " + text);
}
public static void Method2(string text)
{
Console.WriteLine("Method 2 = " + text);
}
}
class EventInfo //: EventArgs 加不加都一样
{
public string EventName { get; set; }
public EventInfo(string eventName)
{
EventName = eventName;
}
}
class ReleaseEvent//事件发布者
{
public event EventHandler<EventInfo> Event;
public void TriggerEvent(string eventName)
{
Console.WriteLine("Trigger Event");
if (Event != null)
{
Event(this, new EventInfo(eventName));
}
}
}
class MonitorEvent//事件监听者
{
private string Name { get; set; }
public MonitorEvent(string name)
{
Name = name;
}
public void Event(object sender, EventInfo e)
{
Console.WriteLine(Name + ":" + "You have a New Event *" + e.EventName);
}
}
}
书上说 EventHandler<TEventArgs> 委托 有2个参数
第一个参数是一个对象,作为事件的发布者
第二个参数提供事件的相关信息,TEventArgs约束为继承自基类EventArgs但是我的EventInfo貌似继承不继承无所谓呀 = = 这个约束到底体现在那里
我用的是.NetFramework 4.5 莫非改了 =-=
我有点晕哈,小弟正在学C# 问题多有幼稚多多包涵 =-=
--------------------编程问答--------------------
哪本书这样写?公布一下作者的名字!
根本没有什么“约束”。 --------------------编程问答-------------------- 谁说一定 要用 EventArgs类型了,你随便,爱穿啥穿啥 --------------------编程问答-------------------- MSDN里面确实有
http://msdn.microsoft.com/zh-cn/library/vstudio/db0etb8x.aspx
否则,第二个参数为从 EventArgs 派生的自定义类型,提供保存事件数据所需的全部字段或属性。
我只能说,写文档的和编写框架的人有一方是错的。或者说,写文挡的从规范的角度说,建议使用者这么做,但是编写框架的,考虑到兼容性,没有使用约束。总之,你最好按照文档约定的来,老老实实从 EventArgs 派生,因为文档是对所有开发者的约定,你不能指望每个开发者都能理解文档和实际框架之间的区别,对于一些人来说,文档的约束就是一种隐喻,你不应该打破它,除非你能有明确的理由。 --------------------编程问答-------------------- 事件数据类继承自EventArgs或者直接使用EventArgs是一种规范写法 --------------------编程问答--------------------
Professional C# and.NET 4里面写的
--------------------编程问答-------------------- 的确4.5 中已经将Where TEventArgs:EventArgs 这个约束去除了。 --------------------编程问答-------------------- 委托很难理解 --------------------编程问答--------------------
不纠结了,就是4.5删除了,虽然不知道为了啥以后就知道了
补充:.NET技术 , C#