Избежание ада от перегрузки с помощью c # 4.0 - PullRequest
8 голосов
/ 02 мая 2010

Я использую C # 4.0, как я могу избежать проблемы написания большого количества похожих методов, потому что каждый из них уникален для каждого параметра (как новые функции параметров могут избежать адской перегрузки?).

Спасибо

Ответы [ 3 ]

13 голосов
/ 02 мая 2010

Вместо этого:

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);

Просто включите то, что вы хотите установить, остальные будут значения по умолчанию, которые вы указали в сигнатуре метода.

6 голосов
/ 02 мая 2010

Предположим, у вас есть класс 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;
    }
}

Этот конструктор можно вызывать следующими способами.

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");
3 голосов
/ 02 мая 2010

В C # 4.0 вы можете использовать дополнительные параметры.

Именованные и необязательные аргументы (Руководство по программированию в C #)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...