用c#4.0避免过载地狱

Gur*_*epS 8 c# c#-4.0

我正在使用C#4.0,如何避免编写大量类似方法的问题,因为它们每个参数都是唯一的(新参数功能如何避免过载地狱?).

谢谢

Nic*_*ver 13

而不是这个:

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...
Run Code Online (Sandbox Code Playgroud)

你可以只使用一个方法来获得你想要的所有参数,并使用这样的命名参数调用它:

void Method(string param1, string param2 = "default2", 
            string param3 = "default3", int int4 = 12, int lastParam = 12) { }
Run Code Online (Sandbox Code Playgroud)

并称之为:

Method(param1: "myString", int4: 23);
//or...
Method(param1: "myString", param4: "string2", int4: 23);
Run Code Online (Sandbox Code Playgroud)

只需包含您要设置的内容,其余内容将是您在方法签名中指定的默认值.


thi*_*eek 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
    }
}
Run Code Online (Sandbox Code Playgroud)

使用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;
    }
}
Run Code Online (Sandbox Code Playgroud)

可以通过以下方式调用此构造函数.

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");
Run Code Online (Sandbox Code Playgroud)