티스토리 뷰

C#

[델리게이트:delegate]

란텔 2014. 6. 24. 21:05

델리게이트란

메서드를 값으로 가질 수 있는 타입으로써

델리게이트형 타입 변수를 선언함으로써 이 변수에 메서드를 값으로 넘길 수 있다.

 

자세한 부분은 밑에 코딩 참고

 

 

 


using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using DelegateApplication; 

namespace DelegateApplication1 
{ 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            DelegateEx de = new DelegateEx(); 
            //Console.WriteLine(de.sDel(1,2)); //SDelegate에 아무런 인스턴스를 생성하지 않아서 빌드실패하는 구문 
            de.sDel = new DelegateEx.SDelegate(de.Sum); //델리게이트에 메서드 집어넣는 방법1 
            de.sDel(1, 2); //결과 3 
            de.sDel += de.Sub; //델리게이트에 메서드 집어넣는 방법2 
            de.sDel(1, 2); //결과 -1 
            de.sDel -= de.Sub; 
            de.sDel(1, 2); 
            //결과를 보면 += 연산시 메서드가 더 추가 됨을 알 수있고, -=연산시 해당메서드가 빠져버리는 것을 알 수있다. 


            de.sDels = new DelegateEx.SDelegate[2] { de.Sum, de.Sub }; //배열로 델리게이트 인스턴스 생성 
            de.sDels[0](1, 2); //결과 3 



        } 
    } 
} 



namespace DelegateApplication 
{ 
    class DelegateEx 
    { 
        public SDelegate sDel; 
        public SDelegate[] sDels; 
         
        public delegate void SDelegate(int a, int b);  
        // 델리게이트 정의방법  
        // 메서드를 넣을 대상으로 기초하여,, 예를 들면 void Sum(int a, int b){}; 일경우 
        // delegate void SumDelegate(int a, int b);  
        // 위처럼 앞에 키워드 delegate를 붙이고 함수명을 델리게이트 타입명으로 정의한다 

        public void Sum(int a, int b) 
        { 
            Console.WriteLine(a + b); 
        } 
        public void Sub(int a, int b) 
        { 
            Console.WriteLine(a - b); 
        } 

         

    } 

}
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday