2013-03-20 2 views
9

У меня есть класс, который содержит свойство:Может ли имя свойства и имя метода быть одинаковым в C#?

public bool IsMandatory {get;set;} 

Теперь я добавляю метод IsMandatory(string str).

public bool IsMandatory(string str) 
{ 
    //return false; 
    //return true; 
} 

Я получаю ошибку во время компиляции, что

типа уже содержит определение для «IsMandatory»

Могут не имя методы и имя свойства такого же в C#? Мы используем метод и свойство по-разному, почему это дает ошибку компиляции?

+6

Если компилятор сказал вам, что вы не можете, то что на самом деле спрашивают? Почему вы не можете? –

+1

@TimRogers, да, я спрашиваю, почему мы не можем? – Brij

+1

как он узнает, какой из них вы хотели назвать? –

ответ

13

Это ошибка компилятора, потому что это может вызвать путаницу, если имена могут быть одинаковыми. В некоторых случаях может возникнуть неоднозначность - например, при использовании делегатов Action и т. Д., Где методы не должны иметь круглых скобок и при использовании var.

+0

Компилятор может радостно различать перегруженные методы 'Set_IsMandatory (значение bool)' и 'Set_IsMandatory (string value)', а если свойства - это просто [синтаксический сахар для методов getter и setter] (http: //programmers.stackexchange. com/a/62395/59429), тогда было бы разумным разрешить методы и свойства использовать одно и то же имя, если результирующие сигнатуры были разными? Я не вижу «замешательства», о котором вы говорите, возможно, вы можете подумать о расширении своего ответа, чтобы помочь мне понять? – Ben

+3

@Ben Рассмотрим свойство 'P', которое возвращает делегат для метода, который принимает один параметр. Теперь рассмотрим наличие в том же классе метода под названием «P», который принимает один параметр того же типа. Если вы должны были написать 'instance.P (x)', было бы неоднозначно, ссылаетесь ли вы на метод 'P' или на вызов делегата через свойство' P'. –

0

Чтобы облегчить ответ, его просто не разрешают. член (поле, свойство и метод) должен быть уникальным.

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