C# 기본 이벤트(1)

5939 단어
이벤트는 C# 언어의 중요한 구성원 중 하나로 초보자는 이벤트를 잘 이해하고 운용하지 못하는데 특히 사용자 정의 이벤트가 그렇다.여기서는 비교적 간단한 방식으로 사건의 가장 기본적인 용법을 나타낼 것이다.

1. 이벤트의 정의


이벤트에 대한 정확한 정의를 내리는 것은 비교적 어려운 일이다. 여기서 나는 이벤트는 두 대상 간의 상호작용 행위이고 여기는 네 글자인'두 대상'을 주목한다.이해하지 못해도 상관없다. 이런 정의 자체가 정확하지 않다.계속 아래를 내려다보다.
이벤트를 정의하기 전에 위임을 선언한 다음 이벤트를 선언합니다.
 // 
 public delegate void GetStrHandler(string x, string y);
 // 
 public event GetStrHandler GetStr;

2. 사건의 세 가지 요소


사건을 운용하는 것을 습득하려면 반드시 사건의 세 가지 요소, 즉 사건 소유자, 사건 구독자, 사건 처리 방법을 알아야 한다.
이벤트 소유자: 이벤트 발표자라고도 하는데 개인적으로는 소유자로 이해하는 것이 더 편리하다고 생각합니다. 분명히 이벤트를 정의하는 사람이 이벤트의 소유자입니다.코드에서 어떤 클래스에 정의된 이벤트를 구체적으로 보면 이 클래스의 실례는 이벤트의 소유자이다.
이벤트 구독자: 이벤트 소유자의 어떤 행위를 쳐다보는 대상으로 이해할 수 있다.
이벤트 처리 방법: 이벤트가 터치된 후에 실행할 방법입니다.이벤트 구독자가 이벤트 소유자의 이벤트를 발견하면 이벤트 구독자가 실행하는 방법이 필요합니다.이 말을 자세히 맛보면 이벤트 처리 방법이 이벤트 구독자에 정의되어 있고 뒤에 있는 코드가 나타난다는 것을 알 수 있다.

3. 사건의 활용


다음은 전체 예제 코드입니다.
    // 
    public delegate void GetStrHandler(string x, string y);

    public class TestA
    {
        // 
        public event GetStrHandler GetStr;
        public void Do(string x, string y)
        {
            GetStr(x, y);
        }
    }

    public class TestB
    {
        private TestA _A;
        public TestB(TestA a)
        {
            _A = a;
            _A.GetStr += OnGetStr;// 
        }

        // 
        private void OnGetStr(string x, string y)
        {
            Console.WriteLine(string.Format("{0}+{1}", x, y));
        }
    }
    
    
     class Program
    {
        static void Main(string[] args)
        {
            TestA a = new TestA();
            TestB b = new TestB(a);
            a.Do("a", "b");// 
            Console.ReadKey();
        }
    }

다음은 2의 이벤트 3요소에 따라 이 코드를 분석합니다.
1. 먼저 의뢰 형식을 정의합니다:void GetStrHandler (string x,string y). 이벤트에 대한 설명을 준비합니다.
2. 이벤트 소유자의 클래스, 즉class Testa를 정의한다. 이벤트 소유자는 이 클래스의 실례 대상인 Testa a = new Testa ().구문을 사용합니다.이 클래스에서는 이벤트 GetStr를 정의합니다.
3..이벤트 구독자의 클래스, 즉class TestB를 정의하고 이벤트 구독자는 이 클래스의 실례 대상인TestB = new TestB(a)이다.에서 정의한 b,TestB의 구조 방법을 자세히 살펴보면 대상 a에 의존하는 것을 발견할 수 있다. 이는 구독자가 사건이 가지고 있는 사건을 감청해야 하기 때문에 사건 소유자를 끌어들여 구독자가 사건 구독을 실현할 수 있도록 해야 한다.
4. 이벤트 처리 방법 정의: 세 가지 요소에서 강조한 바와 같이 이벤트 처리 방법은 구독자에서 정의한 것으로 이벤트가 촉발될 때 실행해야 하는 방법을 나타낸다."Console. Write Line (string. Format ("{0} + {1} ", x, y) 을 실행했습니다."이 동작.
5. 이벤트의 트리거: 코드에서 a.Do("a", "b").이 한마디.코드를 통해 알 수 있듯이 a.Do('a','b')는 사실상 대상 b의 OnGetStr 방법을 호출했다. 이른바 이벤트'구독'은 위탁'템플릿'에 부합되는 방법인 OnGetStr를 전달하는 것과 같고 최종적으로 실행된 것은 OnGetStr 방법이다.이런 언어 묘사는 정확하지 않을 수도 있으니 많이 체득해야 한다.

4. 요약


이상은 사건의 기본적인 운용에 대해 간단한 묘사를 한 것이다.실제로 이벤트 구독자는 여러 개가 있을 수도 있고 여러 개의 이벤트 처리 프로그램이 있을 수도 있으며 이벤트는 하나의 대상이 되어 다른 대상과 여러 개의 대상의 상호작용이 된다.물론 이벤트 소유자도 여러 개의 서로 다른 이벤트를 정의하여 서로 다른 이벤트 구독자에게 구독을 제공할 수 있다.상기는 사건 운용의 방식 중 하나일 뿐이고 사건의 소유자와 구독자는 다른 형식일 수 있다. 예를 들어 정적 클래스 등은 반드시 클래스의 실례가 아니다.

좋은 웹페이지 즐겨찾기