专业编程基础技术教程

网站首页 > 基础教程 正文

C#高级技术之事件详解

ccvgpt 2024-08-28 13:36:10 基础教程 94 ℃

案例:定一个Person类,定一个监听年龄变化的事件,当本命年的时候祝贺一下。触发事件的地方要判断一下是不是事件null

事件语法:event Mydelegate mdl;

C#高级技术之事件详解

加了event关键字实现事件机制的好处:用了event事件,不可以修改事件已经注册的值;不可以冒充进行事件通知了。只能+=、-=!

using System;

using System.Collections;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace TestConsole

{

delegate void MyDel();

class Program

{

static void Main(string[] args)

{

person p = new person();

p.QingZhu += ShowMsg;

p.age = 24;

Console.ReadKey();

}

static void ShowMsg()

{

Console.WriteLine("今年是你的本命年!恭喜你");

}

}

class person

{

private int Age;

public int age

{

get

{

return age;

}

set

{

if (value % 12 == 0)

{

if (QingZhu != null)

{

QingZhu();//执行事件

}

}

}

}

public event MyDel QingZhu;

}

}

委托和事件的总结

委托的作用:占位,在不知道将来要执行的方法的具体代码时,可以先用一个委托变量来代替方法调用(委托的返回值,参数列表要确定)。在实际调用之前,需要为委托赋值,否则为null。

事件的作用: 事件的作用与委托变量一样,只是功能上比委托变量有更多的限制。(比如:1.只能通过+=或-=来绑定方法(事件处理程序)2.只能在类内部调用(触发)事件。)

(面试题)事件和委托的关系:事件由一个私有的委托变量和add_***和remove_***方法组成;

事件的非简化写法:声明一个私有的委托变量和add、remove方法。

using System;

using System.Collections;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace TestConsole

{

delegate void MyDel();

class Program

{

static void Main(string[] args)

{

person p = new person();

p.qingzhu += ShowMsg;

p.age = 24;

Console.ReadKey();

}

static void ShowMsg()

{

Console.WriteLine("今年是你的本命年!恭喜你");

}

}

class person

{

private int Age;

public int age

{

get

{

return age;

}

set

{

if (value % 12 == 0)

{

if (this.QingZhu != null)

{

this.QingZhu();//执行事件

}

}

}

}

private MyDel QingZhu;

public event MyDel qingzhu

{

add

{

this.QingZhu += value;

}

remove

{

this.QingZhu -= value;

}

}

}

}

委托和事件的区别和关系

一种错误的说法“事件是一种特殊的委托”,事件时候是有一个私有委托和add、remove两个方法组成的。

委托用的比较多,事件只有开发WinForm、WPF的时候用的才比较多,而WinForm、WPF则不是学习重点。掌握“事件和语法”、“委托和事件的关系和区别(面试题)”即可。

事件、索引器、属性本质上都是方法。(面试题)接口中可以定义什么?

答:接口中只可以定义方法。接口中也可以定义“事件、索引器、属性”,因为他们本质上也都是方法。

Tags:

最近发表
标签列表