이벤트는 클래스와 클래스 인스턴스에 외부 세계로 알림을 보내는 기능을 제공하여 객체 간의 통신을 구현합니다. 이벤트 멤버가 정의되면 해당 유형에 1. 이벤트에 메서드를 등록하는 기능(+ = 연산자 구현). 2. 이벤트에서 메소드 등록을 취소하는 기능(-= 연산자 구현). 3. 이벤트가 발생하면 등록된 메소드에 대한 알림이 발생합니다. (이벤트는 등록된 메소드 목록을 내부적으로 유지 관리합니다.) 위임은 이벤트 전달자입니다. 이벤트를 정의하려면 위임자가 있어야 합니다. 위임에 대한 자세한 내용을 보려면 위임을 클릭하여 자세히 알아보세요.
이벤트 선언:
클래스 내에서 이벤트를 선언하려면 먼저 이벤트의 대리자 유형을 선언해야 합니다. 예:
pulic delegate void MyDelegateHandler(object sender,EventArgs e);
그런 다음 위의 예를 기반으로 이벤트를 선언하고 event
pulic event MyDelegateHandler MyEvent;
키워드를 사용합니다. (객체 유형은 모든 클래스의 기본 클래스이며 이에 대한 세부 정보는 다음과 같습니다. 이전에 언급한 적이 있습니다. 객체 유형을 클릭한 후 EventArgs는 이벤트 데이터가 포함된 클래스의 기본 클래스이며 이벤트 세부 정보를 전달하는 데 사용됩니다.)
이벤트 작성 예:
.저는 토요일마다 학교 밖에 있는 슈퍼마켓에 가서 물건을 사는 것을 좋아합니다. 그 슈퍼마켓에는 우리가 일정 거리(3미터)에 접근하면 자동으로 열리는 문이 있습니다. ) 아주 상냥하고 친절하게 그 사람 집에 가서 물건을 사러 가고, 회원가입도 해놨기 때문에 내가 다가갈 때마다 자동문이 나를 알아보는 것 같고, “환영합니다. HC666을 우리 슈퍼마켓에 "매우 따뜻하게. ^_^" 이 문은 꽤 재미있습니다.
위의 예에서 "자동문"은 Door에 의해 인스턴스화된 객체로 간주되며 "I"는 객체입니다. "슈퍼마켓에 가기"라는 동작을 호출하면 슈퍼마켓 입구에서 3미터 떨어져 있을 때 우리가 정의한 "Enterdoor" 이벤트가 트리거됩니다. 그러나 Enterdoor는 "Opendoor"를 등록하기 위해 대리자를 사용합니다. "자동문(문)"의 동작, 즉 문열림 방식을 호출하므로 객체간 통신 및 교환이 이루어집니다. 코드는 다음과 같습니다.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test { //定义一个person类,里面包含了方法 class person { public string name = "HC666"; private int distance; //声明委托 public delegate void EnterdoorHandler(object sender,EnterdoorArgs e); //基于委托声明事件 public event EnterdoorHandler Enterdoor; //定义的一个去超市的方法,当距离 distance<=3的时候触发事件 public void GotoStore() { for (int i = 6; i > 0; i--) { distance = i; if (i <= 3) {//触发事件了 EnterdoorArgs e = new EnterdoorArgs(distance); OnEnterdoor(e);//调用触发事件方法 } } } public void OnEnterdoor(EnterdoorArgs e) {//调用事件里注册的方法 if (Enterdoor != null) Enterdoor(this, e); else Console.WriteLine("没有添加处理方法"); } //定义一个包含事件数据的类,这里distance是一个判断的重要数据 public class EnterdoorArgs:EventArgs { public int distance; public EnterdoorArgs(int distance) { this.distance = distance; } } } //定义门这个类 class Door {//定义开门的方法 public void Opendoor(object sender, person.EnterdoorArgs e) { person per = (person)sender; //有点熟悉吧,显示类型转换中有谈到 if (e.distance == 3) { Console.WriteLine("尊敬的顾客您距离本超市 {0}米 即将开门迎接您", e.distance); } if(e.distance <3) Console.WriteLine("热烈欢迎 {0} 光临本超市", per.name); } } class program { static void Main(string[] args) { person per = new person(); //实例化对象 Door door = new Door(); //向事件中注册开门的方法 per.Enterdoor += door.Opendoor; //我去超市 per.GotoStore(); } } }
결과:
위는 C# 학습일기 24 내용----이벤트, 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!