Существует ли надлежащее решение для перегрузки методов, которые должны принимать одинаковые типы значений, или их следует просто избегать? - PullRequest
0 голосов
/ 07 апреля 2019

Я программирую на c #, и это больше вопрос передового опыта.

Я хотел создать перегруженный метод и случайно создал два метода с одинаковыми типами значений в качестве аргументов.Я хотел использовать одно и то же имя метода для упрощения при написании кода позже, поэтому я добавил еще один аргумент int в качестве промежуточного элемента для перегрузки, просто чтобы отделить его от первого метода.Мне это не кажется хорошей практикой кодирования, но это сработало.

Пример здесь:

public static void SetBalance(Customer cust, int index)
{
    cust.Balance = balanceList[index];
}

public static void SetBalance(Customer cust, int value, int notUsed)
{
    cust.Balance += value;
}

Мой вопрос: есть ли более умный или более подходящий способ работывокруг того же типа значений в качестве аргументов метода при перегрузке, или просто создание нового метода с другим именем лучшее решение?

Спасибо за вашу помощь.

Ответы [ 3 ]

2 голосов
/ 07 апреля 2019

Вы бы лучше назвали первый метод как-то вроде RefreshBalance, поскольку полученное значение баланса клиента не связано с какими-либо аргументами, присутствующими в методе.

Второй метод лучше назвать чем-то вроде AdjustBalance или IncrBalance по тем же причинам. Два метода с совершенно разным поведением не должны иметь одинаковые имена.

1 голос
/ 07 апреля 2019

Я вижу здесь проблему именования.Оба эти метода выполняют разные операции, поэтому вы должны дать им правильные имена SetBalance () и AddBalance () и т. Д.

0 голосов
/ 07 апреля 2019

Когда вы перегружаете конструктор, у вас не должно быть двух конструкторов с таким же шаблоном аргумента, как у

public static string myConstruct(Customer cust, int index){}
public static string myContsruct(Customer cust, int age){}

Например, два конструктора имеют одинаковый шаблон аргументов, поэтому при компиляции вы получите ошибку. Чтобы обойти это, просто поменяйте местами аргументы второго конструктора как

public static string myContruct(Customer cust, int index){}
public static string myContruct(int age, Customer cust){}

Это позволит избежать любых конфликтов.

...