RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
.Net  2010.12.11 21:31
C#의 델리게이트는 C나 C++의 함수포인터(Function Pointer)와 유사하다고 보시면 됩니다. 음..함수의 대리자 같은 성격을 지녔다고 보시면 됩니다.
델리게이트의 사용은 WinForm 작성을 하시다 보면, Event 관련 코드에서 많이 보실 수 있습니다. 또한 +, - 연산자가 재정의되어 있어서, 여러 개의 델리게이트를 하나로 구성하여 호출하는 것도 가능합니다.

델리게이트로 사용할 수 있는 함수
- 정적함수(Static Methods)
- 일반멤버함수(Instance Methods)

예제를 보시죠.
    delegate void TestDelegate(string str);

    class Test
    {
        // Delegate로 사용하기 위해 Parameter는 맞춰주어야 합니다.
        public static void PrintStatic(string s) 
        {
            Console.WriteLine("PrintStatic {0}", s);
        }

        public void PrintMember(string s) 
        {
            Console.WriteLine("PrintMember {0}", s);
        }

        // 이와 같이 리턴 값이나 Parameter가 맞지 않은 함수는 델리게이트로 사용할 수 없음.
        public int TempFunc1(string s) { return 0; }
        public void TempFunc2(int no) { }
    }

    class Program
    {
        static void Main()
        {
            Test test = new Test();

            TestDelegate td1 = new TestDelegate(Test.PrintStatic);  // 정적함수의 델리게이트 생성
            TestDelegate td2 = new TestDelegate(test.PrintMember);  // 일반멤버함수의 델리게이트 생성

            // Error : 'int CSharpTest.Test.TempFunc1(string)' has the wrong return type
            //TestDelegate td3 = new TestDelegate(test.TempFunc1);
            // Error : No overload for 'TempFunc2' matches delegate 'CSharpTest.TestDelegate'
            //TestDelegate td4 = new TestDelegate(test.TempFunc2);

            // 함수 호출
            td1("i am Delegate!");
            td2("i am Delegate!");

            // 멀티 델리게이트
            TestDelegate totalTest = td1;
            totalTest += td2;   // 재정의된 +,- 연산자 사용가능.

            Console.WriteLine("Multi Delegate");
            totalTest("i am Delegate!");
        }
    }

결과는 아래와 같습니다.

PrintStatic i am Delegate!
PrintMember i am Delegate!

Multi Delegate
PrintStatic i am Delegate!
PrintMember i am Delegate!

totalTest("i am Delegate!") 하나만 호출해도 구성된 모든 함수가 한번에 호출되는 것을 보실 수 있습니다. .Net의 Event를 이런식으로 많이 사용합니다.



참고 링크
delegate - http://msdn.microsoft.com/ko-kr/library/900fyy8e.aspx (참고항목 보시면 더 자세한 글들을 보실 수 있습니다.)
HOONS닷넷 - C#.NET 기초강좌 #1의 5번글, C#.NET 기초강좌 #2의 24,25번글 

저작자 표시 비영리
신고

'.Net' 카테고리의 다른 글

이벤트(Event)  (0) 2010.12.18
컬렉션 (Collection) and Generic  (0) 2010.12.14
델리게이트(Delegate)  (0) 2010.12.11
C++/CLI  (0) 2010.12.10
Abstract 와 Interface  (0) 2010.12.09
프로갱호:어제의 나보다 더 나아질수 있는 방법을 찾아서~!
어제의 나보다 더 나아질수 있는 방법을 찾아서~!
분류 전체보기 (61)
My Life (13)
Information for Dev (2)
Conference (1)
C Programming (0)
C++ Programming (2)
.Net (14)
Unity3D (14)
Script (1)
Architecture (1)
Design Pattern (0)
Game Technolog (2)
Visual Studio (0)
Network (1)
Financial Technology (0)
All Link (10)
«   2017/08   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
  1. coach usa  2013
    h..
  2. cheap nike shoes  2013
    h..
  3. cheap oakley sunglasses  2013
    ..
  4. prada  2013
    ..
  5. supra skytop  2013
    ..

티스토리 툴바