수색…


명명 된 인수는 코드를 더 명확하게 할 수 있습니다.

다음과 같은 간단한 클래스를 생각해보십시오.

class SmsUtil
{
    public bool SendMessage(string from, string to, string message, int retryCount, object attachment)
    {
         // Some code
    }
}

C # 3.0 이전에는 :

var result = SmsUtil.SendMessage("Mehran", "Maryam", "Hello there!", 12, null);

이름 첨부의 인수 로이 메소드의 호출을보다 명확하게 할 수 있습니다.

var result = SmsUtil.SendMessage(
    from: "Mehran",
    to:  "Maryam",
    message "Hello there!",
    retryCount: 12,
    attachment: null);

명명 된 인수 및 선택적 매개 변수

명명 된 인수를 선택적 매개 변수와 결합 할 수 있습니다.

이 방법을 보자 :

public sealed class SmsUtil
{
    public static bool SendMessage(string from, string to, string message, int retryCount = 5, object attachment = null)
    {
         // Some code
    }
}

retryCount 인수 설정 하지 않고이 메서드를 호출하려는 경우 :

var result = SmsUtil.SendMessage(
                        from       : "Cihan",
                        to         : "Yakar",
                        message    : "Hello there!",
                        attachment : new object());

인수 순서는 필요하지 않습니다.

명명 된 인수는 원하는 순서로 배치 할 수 있습니다.

샘플 방법 :

public static string Sample(string left, string right)
{
     return string.Join("-",left,right);
}

전화 샘플 :

Console.WriteLine (Sample(left:"A",right:"B"));
Console.WriteLine (Sample(right:"A",left:"B"));

결과 :

A-B
B-A

명명 된 인수는 선택적 매개 변수에 대한 버그를 방지합니다.

메소드가 수정 될 때 잠재적 인 버그를 피하려면 항상 선택적 매개 변수에 Named Arguments를 사용하십시오.

class Employee
{
    public string Name { get; private set; }

    public string Title { get; set; }

    public Employee(string name = "<No Name>", string title = "<No Title>")
    {
        this.Name = name;
        this.Title = title;
    }
}

var jack = new Employee("Jack", "Associate");   //bad practice in this line

위 코드는 컴파일러가 언젠가 다음과 같이 변경 될 때까지 컴파일되고 작동합니다.

//Evil Code: add optional parameters between existing optional parameters
public Employee(string name = "<No Name>", string department = "intern", string title = "<No Title>")
{
    this.Name = name;
    this.Department = department;
    this.Title = title;
}

//the below code still compiles, but now "Associate" is an argument of "department"
var jack = new Employee("Jack", "Associate");

"팀의 다른 누군가"가 실수를 저 지르면 버그를 피하는 것이 좋습니다.

var jack = new Employee(name: "Jack", title: "Associate");


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow