C# 4.0 선택적 매개변수, 명명된 매개변수
대전에서 프로젝트를 진행 할 때는 VS2008 C#3.0을 사용해서 잘 몰랐던 부분을
서울에 올라와서 VS2012 C#4.0을 사용하면서 편리함을 느끼고 있네요!
물론 먼저 Raw한 부분부터 경험하는 것은 중요한거죠?^.^ EndUser의 프레임워크 설치도 귀찮게하니..
C++ 을 보면 Default 매개변수라는 개념이 있습니다.
매개변수를 넘기지 않으면 해당 매개변수는 Default값으로 사용하겠다는 개념입니다.
예를들어 C++ 같은 경우에는 아래와 같이 메서드가 정의되어 있을 때 Foo(); 요런식으로 호출이 가능합니다. a의 Default 값은 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
'.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 |