c#事件(event)
事件:事件是委托的一个实例,加上关键字event.事件必须在事件的类中去声明invoke或者赋值,不能在事件外面或者子类中去invoke或者赋值。
委托跟事件的区别:委托是一个类,事件是委托的实例。加上关键字event.
为什么要用事件:一个方法中,有固定不变的和可变的逻辑,委托完全固定不变的,把可变的排除在外,由外部去控制,事件就是完成可变的部分,以及支持扩展。
堆代码的时刻到了:
public event EventHandler PublishEventMessage;//事件
//EventHandler:定义有两个参数无返回值的委托
/// <summary>
/// 触发者
/// </summary>
/// <param name="name"></param>
public void Messages(string name)
{
Console.WriteLine("事件的发布者");
Console.WriteLine(name);
if (!string.IsNullOrWhiteSpace(name))
{
PublishEventMessage.Invoke(this,new Company()
{
CompanyName="腾讯",
HRName="马云",
Message="招.net开发"
});
}
}
}
public class read
{
public void ReadMessages(object send, EventArgs args)
{
var a = (Company)args;
Console.WriteLine("HR姓名:"+a.HRName+",公司的名字:"+a.CompanyName+",司招聘信息:" + a.Message);
Console.WriteLine("招聘者小王已经订阅此消息");
}
}
public class Company:EventArgs
{
public string HRName { get; set; }
public string CompanyName { get; set; }
public string Message { get; set; }
}
static void Main(string[] args)
{
CommandClass model = new CommandClass();
read reads = new read();
model.PublishEventMessage += reads.ReadMessages;
model.Messages("来招聘了");
}
运行结果:

如果你搞不清楚 EventHandler 关键字,或者不喜欢用可以这样写
public class CommandClass
{
public delegate void PublishMessage(Company model);//委托
public event PublishMessage PublishEventMessage;//事件
//EventHandler:定义有两个参数无返回值的委托
/// <summary>
/// 触发者
/// </summary>
/// <param name="name"></param>
public void Messages(string name)
{
Console.WriteLine("事件的发布者");
Console.WriteLine(name);
if (!string.IsNullOrWhiteSpace(name))
{
PublishEventMessage.Invoke(new Company()
{
CompanyName="腾讯",
HRName="马云",
Message="招.net开发"
});
}
}
}
public class read
{
public void ReadMessages( EventArgs args)
{
var a = (Company)args;
Console.WriteLine("HR姓名:"+a.HRName+",公司的名字:"+a.CompanyName+",司招聘信息:" + a.Message);
Console.WriteLine("招聘者小王已经订阅此消息");
}
}
static void Main(string[] args)
{
CommandClass model = new CommandClass();
read reads = new read();
model.PublishEventMessage += reads.ReadMessages;
model.Messages("来招聘了");
}
运行结果跟上面的dome是一样的。
这里的dome写的很简单,本人资历有限,如果有写错的地方,欢迎指点,谢谢!!!

浙公网安备 33010602011771号