본문 바로가기
C#

[c#] delegate 와 Event

by 코모's 2022. 6. 30.
반응형
  • delegate[델리게이트] 
    • 선언 : delegate 반환형 이름(매개변수...);
    • 메소드의 참조(ex.매개변수)를 포함 하여 인스턴스화 하여 작동
    • 반환 형과 매개변수가 모두 같아야함
Class A
{
	delegate int TDelegate(int a, int b);	//델리게이트 선언
    
    int Plus(int a, int b)
    {
    	return a + b;
    }
    
    int Minus(int a, int b)
    {
    	return a - b;
    }
    
    void Main()
    {
    	TDelegate td1 = Plus;
        TDelegate td2 = delegate(int a, int b)
        {
        	return a / b;
        };
        
        Console.WriteLine(tb1(5,10));	//15출력
        Console.WriteLine(tb2(10,5));	//2출력
        
        //이런식으로 여러개를 묶어서 사용도 가능
        TDelegate tdchain = (TDelegate)Delegate.Combine(new TDelegate(Plus), new TDelegate(Minus));
        
        Console.WriteLine(tb1(20,10));	//30 10 출력
    }
    
}

 

  • Event[이벤트]
  • 선언 : event 델리게이트 이름;
Class B
{
	public delegate void MyDelegate(string msg);
    
    Class Publisher
    {
    	public event MyDelegate Active;
        
        public void DoActive(int number)
        {
        	if(number % 10 == 0)	Active("Active" + number);
            else	Console.WriteLine(number);
        }
        
        Class Subscriber
        {
        	static public void MyHandler(string msg)
            {
            	Console.WriteLine(msg);
            }
            
            static void Main()
            {
            	Publisher publisher = new Publisher();
                publisher.Active += new MyDelegate(MyHandler);
                
                for(int i =0; i < 50; i++)
                {
                	publisher.DoActive(i);
                   	//1 2 ... Actiave10 11 12 ... Active40 41 ... 49
                }
            }
        }
    }
}
반응형