[C#기초] 5. 델리게이트와 이벤트

INDEX

  1. 델리게이트
  2. 멀티캐스트 델리게이트
  3. 이벤트
  4. 델리게이트와 이벤트 비교

델리게이트

델리게이트

델리게이트 형식

델리게이트 사용 예제 코드

delegate void DelegateType(string str);
class A
{
    public void print(string str)
    {
        Console.WriteLine(str);
    }
}
class Program
{
    static void Main(string[] args)
    {
        A Test = new A();
        DelegateType DelMethod1 = new DelegateType(Test.print); //C# 1.0 이상에서 사용 가능
        DelMethod1("Hello World1!");

        DelegateType DelMethod2 = Test.print; //C# 2.0 이상에서 사용 가능
        DelMethod2("Hello World2!");
    }
}

결과

image

멀티캐스트 델리게이트

델리게이트 조합

멀티캐스트 델리게이트 예제 코드

delegate void DelegateType();
class A
{
    public void printA()
    {
        Console.WriteLine("PrintA");
    }
    public void printB()
    {
        Console.WriteLine("PrintB");
    }
}
class Program
{
    static void Main(string[] args)
    {
        A Test = new A();
        DelegateType DelFunc = Test.printA;
        DelFunc += Test.PrintB;
        DelFunc();
        DelFunc -= Test.printB;
        DelFunc();
    }
}

결과

image

이벤트

개념

특징

이벤트의 핵심

이벤트 핸들러 매개변수

이벤트 형식

이벤트 사용 예제

delegate void DelegateType(string Message);

class A
{
    public event DelegateType EventHandler;
    public void func(string Message)
    {
        EventHandler(Message);
    }
}

class B
{
    public void PrintA(string Message)
    {
        Console.WriteLine("PrintA:"+Message);
    }
    public void PrintB(string Message)
    {
        Console.WriteLine("PrintB:"+Message);
    }
}

class Program
{
    static void Main(string[] args)
    {
        A Test1 = new A();
        B Test2 = new B();

        Test1.EventHandler += new DelegateType(Test2.PrintA);
        Test1.EventHandler += new DelegateType(Test2.PrintB);

        Test1.func("Good!!");
        Test1.EventHandler -= Test2.PrintB;
        Test1.func("Hi!");
        Test1.EventHandler -= Test2.PrintA;

        Test1.EventHandler += Test2.PrintA; //처리기에 추가하기
        Test1.EventHandler += Test2.PrintB;
    }
}

결과

image

델리게이트와 이벤트 비교

  델리게이트 이벤트
공통점 객체의 메서드 호출 객체의 메서드 호출
차이점 델리게이트로 호출
델리게이트에 연결
이벤트를 포함한 메서드에서 호출
이벤트 핸들러에 연결
  속성 인덱서
공통점 객체의 멤버 변수를 R/W 객체의 멤버 변수를 R/W
차이점 변수 배열