2013-05-18 4 views
1

У меня есть 2 метода с одинаковыми именами и теми же параметрами. Я хочу, чтобы перегрузить те, но это не работает, потому что я получаю эту ошибку:Перегрузка 2 метода с одинаковыми именами и такими же параметрами

"<Class-name> already defines a member called 'ChangeProfileInformation' 
with the same parameter types" 

У меня есть что-то вроде этого:

public void ChangeProfileInformation(User user) 
{ 
    a 
    b 
} 

public void ChangeProfileInformation(User user) 
{ 
    a 
    c 
    d 
} 

Кто-нибудь знает, почему это не работает?

Заранее благодарен!

+0

Как компилятор должен знать, какой метод он должен использовать? Вы можете ввести 2 разных названия. во втором методе вы можете вызвать первый – Tomtom

+0

Вы пытаетесь реализовать два интерфейса? Затем вы можете использовать _explicit interface implementation_. –

ответ

6

Перегрузка означает использование одного и того же имени функции, выполняющего разные вещи. Для этого две функции должны иметь различную подпись, иначе компилятор не может дифференцироваться. У вас должна быть другая подпись.

+0

Спасибо, я думал, что это должно быть возможно, теперь это ясно для меня. – Swag

+0

Если все то же самое, кроме имени параметра, не считается другой подписью? – JsonStatham

+0

@selectDistinct nope. Имя параметра не учитывается. Это тип параметра и количество параметров, которые рассматриваются. – Guanxi

4

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

В качестве альтернативы, почему бы вам не использовать необязательный флаг для изменения поведения функции?

1

Метод перегрузки означает Тот же метод Имя, но с другой подписью метода. Method Signature signifies the Method Name with Input parameters. Вы действительно не можете достичь перегрузки метода с тем же именем метода с тем же типом параметра.

Вы можете лучше взглянуть в детали концепции перегрузкой метода из следующих сайтов:

http://www.dotnetperls.com/overload

http://csharpindepth.com/Articles/General/Overloading.aspx

0

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

Смежные вопросы