미처 완성되지 못한 알고리즘

delegate 와 event 본문

IT/c#

delegate 와 event

-June- 2017. 8. 23. 12:20

delegate란 쉽게 얘기해서 함수 포인터다. 



원하는 함수 타입 앞에 delegate란 키워드를 붙여주며 원하는 함수의 형식으로 선언한다.




예)



한정자 delegate 반환형식 델리게이트 이름( 매개변수 목록);



public delegate void myDelegate(int a );






사용 예)



namespace ConsoleApp1

{


    public delegate void myDelegate( int a);           ----------- 1


    class Program

    {

        public void printNum(int a)

        {

            Console.WriteLine("{0}",a);

        }


        static void Main(string[] args)

        {

            Program p1 = new Program();


            myDelegate dele = new myDelegate(p1.printNum);               ----------2


            dele(4);                                                                        ----------3

        }

    }

}





1.델리게이트를 선언한다. 

2.델리게이트 객체를 선언하면서 생성자에 해당 객체의 메소드 이름을 넘겨준다.

3.델리게이트 객체 변수 이름을 사용하면서 해당 메소드를 이용하는 것을 보여준다.





델리게이트는 += 기호를 통해  여러 메소드를 등록할 수도 있고 -=를 통해 제거를 할 수도 있다.








event



이벤트는 특정 사건이 일어나면 발생되는 호출로 요약할 수 있다. 이벤트가 발생하면 이벤트에 등록된

메소드를 통해 처리하는데 이것을 이벤트 처리기라고 한다.




이벤트는   한정자 event DelegateType 이벤트네임 ; 으로 선언된다.




이벤트는 미리 정의된 델리게이트형으로 선언하기 때문에 먼저 이벤트를 처리하는 메소드와 형태가


일치하는 델리게이트를 정의해야 한다.






사용 예)



namespace ConsoleApp1

{


    public delegate void myDelegate( int a);                              -------------------1


    class Program

    {

        public event myDelegate Event;                                     -------------------2


        public void printNum(int a)

        {

            Console.WriteLine("{0}",a);

        }


        static void Main(string[] args)

        {

            Program p1 = new Program();


            p1.Event += new myDelegate(p1.printNum);              --------------------3


            p1.Event(4);                                                        --------------------4

        }

    }

}




1.델리게이트를 정의한다.
2. 해당 델리게이트와 맞는 이벤트를 클래스 내에 선언한다.
3. 이벤트에 해당 메소드를 집어넣는다.
4.이벤트 이름으로 해당 메소드를 호출한다.







delegate와 event의 차이점.


델리게이트와 이벤트의 가장 큰 차이점은 이벤트는 외부에 선언할 수 없는 데에 있다. 

이벤트는 public 한정자로 선언되어 있어도 자신이 선언되어 있는 클래스 외부에서는 호출이 불가능하다.


 

 

 

-------------------------------------------------------------------------------------------------------------------

 

초기화 시, null을 대입해준다.

'IT > c#' 카테고리의 다른 글

Thread  (0) 2017.08.24
LINQ  (0) 2017.08.24
오버플로를 검사하기 위한 checked와 unchecked 문  (0) 2017.08.23
Nullable type  (0) 2017.08.23
형변환 연산자 is, as  (0) 2017.08.23