1 using System;
 2 
 3 namespace 대리자
 4 {
 5     // Hello 클래스
 6     public class Hello
 7     {
 8         // 매개변수가 없는 정적 메서드
 9         public static void Hi() { Console.WriteLine("안녕"); }
10         // 매개변수가 있는 인스턴스 메서드
11         public void Bye() { Console.WriteLine("또봐"); }
12     }
13     // Sum 클래스
14     public class Sum
15     {
16         public static void Execute(int x, int y)
17         {
18             Console.WriteLine("{0} + {1} = {2}"
19                 , x, y, (x + y));
20         }
21     }
22     // Main 클래스
23     public class MainClass
24     {
25         //[!] 대리자 선언
26         // 매개변수가 없는 메서드 등록 가능
27         public delegate void HelloDelegate();
28         // 매개변수가 있는 메서드 등록 가능
29         public delegate void SumDelegate(int a, int b); 
30 
31         public static void Main(string[] args)
32         {
33             //[1] 다중 메서드 호출 방식 : 따로 따로 호출
34             Hello.Hi();
35             Hello hello = new Hello();
36             hello.Bye();
37 
38             //[2] 대리자 사용 : 대리자를 통한 메서드 대신 호출
39             HelloDelegate helloDelegate;
40             helloDelegate = new HelloDelegate(Hello.Hi);
41             helloDelegate += new HelloDelegate(hello.Bye);
42             helloDelegate(); // 대리자를 통한 다중 메서드 호출
43 
44             //[3] 매개변수가 있는 메서드 대신 호출
45             SumDelegate sumDelegate = 
46                 new SumDelegate(Sum.Execute);
47             sumDelegate(3, 5);
48         }
49     }
50 }