C# 2.0의 구문 살펴보기 Part 2: 익명 대리자

이제까지 대리자의 선언은 명시적인 대리자 선언이 많이 사용되어왔습니다. 하지만 C# 2.0에서는 새롭게 추가된 대리자 프로그래밍 방법론을 제공합니다. 바로 익명 대리자 혹은 인라인 대리자라고 합니다. 이 기술을 이용하여 특정 메서드나 코드 블럭 안에서 간단히 새로운 메서드를 작성하는 것이 가능해졌습니다.


이 익명 대리자를 사용하는 조건은 기존의 명시적인 대리자 선언과 마찬가지로 대리자 형식의 선언이 되어있어야 한다는 전제가 깔려있습니다. 하지만 구현 방법과 시점의 차이가 명시적인 대리자와 익명 대리자를 구분하는 기준선이 되는 것입니다.


명시적인 대리자를 구현하는 클래스를 살펴보도록 하지요.



    // Common.cs


    using System;


    namespace Test


    {


      [Serializable()]


      public delegate void TestDelegate(int a, string b);


      public interface ITester


      {


           void Test();


      }


    }


    // NamedTest.cs


    using System;


    using Test;


    namespace Test.Named


    {


      public class NamedTest : ITester


      {


           public void Test()


           {


               TestDelegate d = new TestDelegate(this.NamedMethod);


               d(123, “named: one-two-three!”);


           }


           private void NamedMethod(int a, string b)


           {


               Console.WriteLine(a.ToString());


               Console.WriteLine(b);


               Console.ReadLine();


           }


      }


    }


    // AnonTest.cs


    using System;


    using Test;


    namespace Test.Anon


    {


      public class AnonTest : ITester


      {


           public void Test()


           {


               TestDelegate d = delegate(int a, string b)


               {


                   Console.WriteLine(a.ToString());


                   Console.WriteLine(b);


                   Console.ReadLine();


               }; // 세미콜론은 필수!


               d(123, “anon: one-two-three!”);


           }


      }


    }


    // MainObject.cs


    using System;


    using Test.Named;


    using Test.Anon;


    namespace Test


    {


      public sealed class MainObject


      {


           [MTAThread()]


           public static void Main(string[] arguments)


           {


               ITester t = new NamedTest();


               t.Test();


               t = new AnonTest();


               t.Test();


           }


      }


    }


개략적인 문법 사항만을 살펴보도록 하겠습니다. 지금 지적하는 부분 이외에는 기존의 대리자 프로그래밍 방법과 동일합니다.


익명 대리자를 지정하기 위하여 다음과 같은 구문을 사용합니다.



    delegate(매개변수 목록)


    {


      // 함수 본문;


    };


매개변수 목록은 해당 대리자의 인수 목록과 일치하도록 선언되어야만 합니다. 함수 본문은 메서드와 동일하게 작성할 수 있으며, return 키워드로 반환값을 반환할 수 있는 조건은 대리자의 반환값에 관한 시그니처에 따라서 달라집니다. 그리고 실수하지 말아야할 부분은 이 블럭이 끝나는 대괄호 끝에는 반드시 세미콜론을 기록해야 합니다.


다음 강좌에서는 클래스의 Generic에 관하여 살펴보도록 하겠습니다. 좋은 하루 되십시오.

댓글 남기기