C# 4.0 선택적 매개변수, 명명된 매개변수

 

대전에서 프로젝트를 진행 할 때는 VS2008 C#3.0을 사용해서 잘 몰랐던 부분을

서울에 올라와서 VS2012 C#4.0을 사용하면서 편리함을 느끼고 있네요!

물론 먼저 Raw한 부분부터 경험하는 것은 중요한거죠?^.^ EndUser의 프레임워크 설치도 귀찮게하니..

 

 

C++ 을 보면 Default 매개변수라는 개념이 있습니다.

매개변수를 넘기지 않으면 해당 매개변수는 Default값으로 사용하겠다는 개념입니다.

예를들어 C++ 같은 경우에는 아래와 같이 메서드가 정의되어 있을   Foo(); 요런식으로 호출이 가능합니다. aDefault 값은 0으로 지정해두었으니 정수형 값 1 Return되겠네요.

int Foo(int a=0)

{

     return a+1;

}

 

C#에서는 Default 매개변수라는 개념이 C#4.0 이전까지는 없었습니다.

너무 불편했었습니다….. 예를들어 아래의 코드를 보시면

주소록에 이름과 전화번호를 추가할 때 전화번호는 일단 입력하고 싶지 않을 때,

아래와 같이 오버로딩을 이용하였었습니다.

class Program

    {

        class Man

        {

            public string Name { get; private set; }

            public string CellPhone { get; private set; }

 

            public Man(string name, string cellPhone)

            {

                this.Name = name;

                this.CellPhone=  cellPhone;

            }

        }

 

        class AddressBook

        {

            public List<Man> Mans { get; private set; }

 

            public void CreateMan(string name, string cellPhone)

            {

                Man man = new Man(name, cellPhone);

                this.Mans.Add(man);

            }

            public void CreateMan(string name)

            {

                this.CreateMan(name, "None");

            }

        }

 

        static void Main(string[] args)

        {

            AddressBook addressBook = new AddressBook();

            addressBook.CreateMan("경찰서", "112");

            addressBook.CreateMan("소방서", "119");

            addressBook.CreateMan("새로알게된사람");

        }

    }

 


                                   

오버로딩의 대안을 제시한 새로운 명명된 매개 변수와 선택적 매개 변수 기능이 C# 4.0에 나왔습니다.  위의 코드는 아래와 같이 선택적 매개변수로 깔끔하게 변하였습니다. , 선택적 매개변수는 선택적이지 않은 매개변수의 무조건 뒤쪽에 붙어야 합니다.

        class AddressBook

        {

            public List<Man> Mans { get; private set; }

 

            public void CreateMan(string name, string cellPhone = "None")

            {

                Man man = new Man(name, cellPhone);

                this.Mans.Add(man);

            }

        }

 

        static void Main(string[] args)

        {

            AddressBook addressBook = new AddressBook();

            addressBook.CreateMan("경찰서", "112");

            addressBook.CreateMan("소방서", "119");

            addressBook.CreateMan("새로알게된사람");

        }  

 

 

위의 코드에서 아래와 같이 주소도 추가하였습니다.

public void CreateMan(string name, string cellPhone = "None", string address="None")

{

Man man = new Man(name, cellPhone);

this.Mans.Add(man);

}

 

애매하지요. 이름과 주소만 추가하고싶은데 가운데 전화번호는 어떻게하지?

명명된 매개변수를 이용하면 처리가 가능합니다.  

매개변수명: 매개변수

위와 같이 진행하시면 원하는 매개변수를 지정하여 원하는 데이터를 넘길 수 있습니다.

관심이 없는 매개변수는 그냥 내버려두시면 됩니다.

class AddressBook

{

    public List<Man> Mans { get; private set; }

 

    public void CreateMan(string name, string cellPhone = "None", string address="None")

    {

        Man man = new Man(name, cellPhone);

        this.Mans.Add(man);

    }

}

 

static void Main(string[] args)

{

    AddressBook addressBook = new AddressBook();

    addressBook.CreateMan("경찰서", "112");

    addressBook.CreateMan("소방서", "119");

    addressBook.CreateMan("우리집", "031", "경기도");

    addressBook.CreateMan("새로알게된사람", address: "경기도");

}

 

 

 

소스 : AboutOptionParam.zip

출처 : MSDN - C# 4.0

'.Net > C#' 카테고리의 다른 글

C# null조건 검사하지 않고 event 발생키시기  (0) 2013.07.30
C# Keys 열거형  (0) 2013.07.11
C# CMD 창 띄우지 않고 명령어 실행하기  (0) 2012.12.26
유니코드표  (0) 2012.09.24
C# Excel 범위로 데이터들 가져오기  (0) 2012.08.30

+ Recent posts