खोज…


नामित तर्क आपके कोड को और अधिक स्पष्ट कर सकते हैं

इस सरल वर्ग पर विचार करें:

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

नामित तर्क वैकल्पिक मापदंडों पर बग से बचते हैं

वैकल्पिक मापदंडों के लिए हमेशा नामांकित तर्क का उपयोग करें, जब विधि को संशोधित किया जाता है तो संभावित बग से बचने के लिए।

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