2010-05-02 4 views
7

C# 4.0을 사용하고 있습니다. 각 매개 변수가 고유하므로 (과부하 지옥을 피할 수있는 방법은 무엇입니까?) 많은 비슷한 방법을 쓰는 문제를 피하려면 어떻게해야합니까?C# 4.0을 사용하여 과부하 피하기

감사

이 대신

답변

13

: 당신은 당신이 원하는 모든 PARAMS 하나 개의 방법이 있고, 다음과 같이 명명 된 PARAMS를 사용하여 호출 할 수 있습니다

void Method(string param1, string param2) { } 
void Method(string param1, string param2, string param3) { } 
void Method(string param1, string param2, string param3, string param4) { } 
void Method(string param1, string param2, string param3, int int4) { } 
//etc... 

:

void Method(string param1, string param2 = "default2", 
      string param3 = "default3", int int4 = 12, int lastParam = 12) { } 

다음과 같이 호출하십시오.

Method(param1: "myString", int4: 23); 
//or... 
Method(param1: "myString", param4: "string2", int4: 23); 

설정하려는 것을 포함 시키면 나머지는 메소드 서명에서 지정한 기본값이됩니다.

+1

나는 구문이 중괄호가없는 것 같아요. –

+1

@Martinho - Woops가 동시에 자바 스크립트 객체 질문에 대답하고있었습니다 :) fixed –

+0

메소드가 모든 매개 변수를 사용하고 일부만 전달하려고하면 어떻게됩니까? – dotnetdev

6

아래에 설명 된 Employee 클래스에는 3 개의 생성자가 있다고 가정합니다.

public class Employee 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Qualification { get; set; } 
    public string MiddleName { get; set; } 

    public Employee(string firstName, string lastName) 
    { 
     FirstName= firstName; 
     LastName= lastName; 
     Qualification= "N/A"; 
     MiddleName= string.Empty; 
    } 
    public Employee(string firstName, string lastName, string qualification) 
    { 
     FirstName= firstName; 
     LastName= lastName; 
     Qualification= qualification; 
     MiddleName= string.Empty; 

    } 
    public Employee(string firstName, string lastName, string qualification, 
     string middleName) 
    { 
     FirstName= firstName; 
     LastName= lastName; 
     Qualification= qualification; 
     MiddleName= middleName 
    } 
} 

C# 4.0에서는 다음과 같이 단일 생성자를 만들어야 모든 3 개의 생성자가 대체됩니다.

public class Employee 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Qualification { get; set; } 
    public string MiddleName { get; set; } 

    public Employee(string firstName, string lastName, 
      string qualification = "N/A", string middleName = "") 
    { 
     FirstName= firstName; 
     LastName= lastName; 
     Qualification= qualification; 
     MiddleName = middleName; 
    } 
} 

이 생성자

는 C#을 4.0

Employee emp = new Employee("Adil", "Mughal"); 
Employee emp = new Employee("Adil", "Mughal", middleName: "Ahmed"); 
Employee emp = new Employee("Adil", qualification:"BS"); 
Employee emp = new Employee("ABC", lastName: "EFG", qualification: "BS"); 
Employee emp = new Employee("XYZ", middleName: "MNO"); 
+1

C# 3의 속성 초기화로 이미 이와 비슷한 작업을 수행 할 수 있으므로 생성자와 반대되는 메서드를 사용하면이 문제를보다 효과적으로 표시 할 수 있습니다. –

+0

첫 번째 버전에서는 더 적은 인수를 가진 생성자에 기본 생성자 값. 두 번째 옵션이 더 좋으므로 쓸데없는 점이지만 일요일에 nit를 선택하는 것입니다. –

+0

C# 3에서는 매개 변수 컬렉션 개체를 받아들이도록 메서드를 다시 작성하는 것이 좋습니다. 닉 발언처럼, 당신은 편리하게 속성 이니셜 라이저를 사용하여 그 객체를 초기화 할 수 있습니다. 하지만 C# 4.0에서는 메서드에서 직접 선택적 인수를 사용하는 것이 훨씬 더 합리적인 것처럼 보입니다. – Joren