C #을 기본 - 이벤트 이벤트

 

 

이벤트 (이벤트)  기본적으로 같은 같은 시스템 생성 통지 등의 키, 클릭, 마우스 이동 등, 또는 메시지와 같은 사용자의 작업을 말한다. 응용 프로그램이 발생할 때 이벤트에 응답해야합니다. 예를 들어, 인터럽트.

C # 이벤트 메커니즘은 스레드 간의 통신에 사용된다.

이벤트 1. 정의

정확한 정의에 다음 이벤트는 내가로 정의하기 위하여려고하고 여기에, 더 어려운 일이다 : 이벤트가 두 개체의 ". 두 개체"상호 작용에 초점 여기가 단어 사이 그것은 중요하지 않습니다 이해하지 마십시오,이 정의 자체가 정확하지 않습니다. , 읽기.

대리자를 정의하는 이벤트 전에 선언 한 다음 이벤트를 선언 :

 

이벤트 2. 세 요소

이벤트 소유자, 이벤트 가입, 이벤트 처리 방법 : 이벤트를 사용하는 방법을 배우게 우리는 이벤트의 세 가지 요소를 알고 있어야합니다.

이벤트 소유자 : 또한 개인적으로 쉽게 소유자와 이해 느낌, 이벤트 게시자라고, 그것은 분명 그 이벤트 이벤트의 소유자가 누구의 정의. 이벤트에 정의 된 클래스 코드에 특정는,이 클래스의 인스턴스는 소유자의 이벤트입니다.

이벤트 가입자 : 평균 행동 이벤트 객체의 소유자를 "보고".

이벤트 처리 메소드 : 이벤트 트리거가 실행되는 방법 후. "발견"이벤트 가입자가 이벤트가 이벤트에 의해 트리거 된 경우, 가입자 방법이 필요로하는 이벤트를 실시한다. 이 문장을 맛 조심스럽게 어렵지 않다 이벤트 핸들러 방법은 이벤트 가입자에 정의되어 찾아, 코드 뒤에 반영됩니다.

 

그리고 클래스에 선언 된 이벤트를 생성하고, 같은 클래스 또는위원회의 다른 클래스를 사용하여 이벤트 처리기 관련 수 있습니다. 사용 이벤트  게시 - (게시자 가입자) 구독  모델을.

이 클래스는 이벤트를 게시하는 이벤트를 포함합니다. 이 알려져있다  발행자 (출판사)  클래스입니다.

다른 받아 이벤트 클래스가 호출  가입자 (가입자)  클래스입니다.

 

발행인 (발행인)  포함되어 이벤트위임 객체 정의. 이벤트 및 대표 사이의 링크는이 객체에 정의되어 있습니다.

객체 출판사 (출판사) 이벤트의 유형을 호출하고 다른 개체를 통지 할 수 있습니다.

 

가입자 (가입자)  수락 된 이벤트와 이벤트 핸들러 객체를 제공한다.

클래스 위임 호출 가입자 (가입자) (이벤트 핸들러)의 클래스 발행인 (발행인) 방법에서.

 

구별 이벤트 위임와 연락

이벤트가 선언에서, 우리는 거의 이벤트의 시운전과의 관계를 볼 수 있으며, 이벤트는 이벤트가 언어에 대한위원회의 지원을 기반으로, 특별한 구현 위임합니다.

위임 이벤트의 유형이 권한 이벤트 컨트롤의 대리자 형식의 인스턴스입니다 만, 외부의 허용도 서브 클래스 호출되지 않은 경우에 클래스 선언 및 할당을 호출 할 수 권한을 제한합니다.

 

 

간단한 예는이 메시징 메커니즘을 설명한다.
세 가족이 먹는에 대한 책임이있는 어머니, 아버지와 아이가 요리를 담당하고있다. . . 이 세 사람, 세 개의 클래스로 생각합니다.
엄마라는 방법이있다 "요리를." 라는 이벤트가있다 "저녁 식사." 이벤트, 저녁 식사 보도 자료의 개발을 호출, 저녁 식사를 마쳤다.
아버지와 자식이라는 방법이었다 "먹는다."
아버지와 아이들은 어머니의 "저녁 식사"이벤트 등록에 접근을 "먹는". 즉 메시지의 저녁 식사 가입 어머니입니다. 그녀의 어머니는 뉴스를 게시 먹고, 식사 저녁 식사를 마치면 곧 아빠와 아이를 말한다.

이 메커니즘은 C #을 발행 subscription에 있습니다. 여기에 우리가 달성하기 위해 코드를 사용 :

 

프로그램 클래스는
    {
        공공 정적 메인 (문자열 []에 인수)를 무효
        {
            // 객체 인스턴스화
            , 엄마 MOM = 새 새 엄마 ()
            아빠 아빠 아빠 새로운 새로운 = ();
            아동 자녀 새로운 새 =을 ();
             
            // 아이 아버지 방법은 이벤트 어머니의에 먹어 등록 식사 할 수있는
            // 구독 엄마의 저녁 뉴스
            mom.Eat + = dad.Eat는,
            mom.Eat + = child.Eat;
             
            // 쿡 이벤트의 어머니 전화
            mom.Cook를 ();
             
            Console.Write을 ( ) "을 눌러 어떤 키는 ... 계속";
            () true로 Console.ReadKey;
        }
    }
     
    공용 클래스 엄마
    {
        // 정의 이벤트는 소식을 게시 먹고, 먹고
        이벤트 조치 먹을 공공;.
         
        공공 무효 쿡 ()
        {
            Console.WriteLine ( "엄마 : 좋아 식사");
            // 좋은 식사, 뉴스 게시 먹지
            ?. 먹어을 .Invoke ();
        }
    }
     
    아빠 공용 클래스를
    {
        . 공공 무효가 먹기를 ( )
        {
            // 저녁에 아버지
            Console.WriteLine ( "아버지 :. 먹고");
        }
    }
     
    공용 클래스 아이
    {
        공공 무효 먹고 ().
        {
            // 아이가 LOL, 킥 먹고 베어 할
            Console.WriteLine을 ( "어린이 : 이 국까지 입력 "식사);
        }
    }

 

 

// 고양이 후속 조치의 일련의 트리거 부른다  
        // 더 지정된 조치가 밖으로 던져이 불안정 냄비 패키지보다
         공공 이벤트 조치 CatMiaoActionHandler;
         공공 무효 MiaoEvent ()
        {
            Console.WriteLine ( "{0} MiaoEvent"는이. GetType을 () 이름);
            this.CatMiaoActionHandler .Invoke? ();
            Console.WriteLine ( "* ^ & * ^ * ^ * (^ & * ^ & ^ * * * ^^");
        }

CatMiaoActionHandler

 

고양이 고양이는 새로운 고양이를 () =;
                    
                    cat.CatMiaoActionHandler + = 새로운 개 () 왕.;
                    cat.CatMiaoActionHandler + = 새 마우스 ()를 실행합니다.;
                    cat.CatMiaoActionHandler + = 새 아기 () 외침.;

                    //cat.CatMiaoActionHandler.Invoke ();
                    //cat.CatMiaoActionHandler = NULL;

                    cat.CatMiaoActionHandler + = 새 어머니 () Wispher.;
                    cat.CatMiaoActionHandler + = 새로운 형제 () 돌립니다.;
                    cat.CatMiaoActionHandler + = 새 아버지 () 로어.;
                    cat.CatMiaoActionHandler + = 새로운 이웃 () 깨어.;
                    cat.CatMiaoActionHandler + = 새 도루 () 숨기기.;
                    cat.MiaoEvent ();

cat.MiaoEvent ();

 

세 가지 범주를 사용하여 메인 이벤트 :

클래스 testEventArgs을 정의 1. 매개 변수 :있는 EventArgs에서 상속 (EventArgs입니다은 아무것도하지 않고 있지만)

2. 이벤트 게시 클래스 모니터 (게시자 출판사)

3. 이벤트 리스너 클래스 수신기 (가입자 subscriiber)

 

시스템을 사용하여;
System.Collections.Generic을 사용함;
System.Text을 사용함;
 
네임 스페이스 EventLearn
{
    클래스 testArgs : EventArgs입니다
    {
        공공 문자열 MSG;
        공공 testArgs (문자열 MSG)
        {
            this.msg = MSG;
        }
    }
 
    클래스 모니터
    {
        공개 대리인 공극 delegateHander (객체 송신자 testArgs E);
 
        공공 이벤트 delegateHander pressKey;
 
        공공 무효 실행 ()
        {
            할
            {
                Console.WriteLine는 ( "아무 키나 누르십시오 입력 '출구'과정을 완료 할 수 있습니다.!");
                문자열을 입력 Console.ReadLine () =;
                (입력 == "출구")하는 경우
                    휴식;
                pressKey (이 새로운 testArgs (입력));
            }
            동안 (TRUE);
        }
    }
 
 
 
    클래스 수신기
    {
    공공 수신기 (모니터 모니터)
    {
        Monitor.pressKey + = 모니터. delegateHander (this.process);
    }
 
        공개 무효 처리 (오브젝트 송신자 testArgs E)
        {
            Console.WriteLine ( "당신은 입력을 문자열을 가지고 : {0}", e.msg);
        }
    }
}

 

다음은 주요 프로그램은 다음과 같습니다

시스템을 사용하여;
System.Collections.Generic을 사용함;
System.Text을 사용함;
 
네임 스페이스 EventLearn
{
    클래스 프로그램
    {
        정적 무효 메인 (문자열 []에 args)
        {
            모니터는 모니터 = 모니터를 ();
            수신기 수신기는 = 새로운 수신기 ( 모니터 );
            감시 장치. 실행 ();
            Console.ReadKey ();
        }
    }
}

发布了85 篇原创文章 · 获赞 30 · 访问量 27万+

추천

출처blog.csdn.net/qq_42672770/article/details/104436524