2013-03-20 7 views
9

Ich habe eine Klasse, die eine Eigenschaft enthält:Können ein Eigenschaftenname und ein Methodenname in C# identisch sein?

public bool IsMandatory {get;set;} 

Jetzt bin ich IsMandatory(string str) eine Methode hinzufügen.

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

Ich erhalte einen Fehler zur Kompilierzeit, dass

die Art bereits eine Definition enthält für ‚IsMandatory‘

Kann kein Methodennamen und Eigenschaftsnamen sein gleichen in C#? Wir verwenden eine Methode und eine Eigenschaft auf unterschiedliche Art und Weise, warum gibt es einen Kompilierungsfehler?

+6

Wenn der Compiler Ihnen gesagt hat, dass Sie das nicht können, was fragen Sie dann? Warum kannst du nicht? –

+1

@TimRogers, ja ich frage, warum wir nicht können? – Brij

+1

wie würde es wissen, welchen du anrufen wolltest? –

Antwort

13

Es ist ein Compiler-Fehler, weil es Verwirrung stiften würde, wenn die Namen identisch sein könnten. Es gibt einige Fälle, in denen Mehrdeutigkeiten auftreten können, z. B. bei der Verwendung von Delegaten für Aktionen usw., bei denen Methoden keine Klammern enthalten müssen und bei Verwendung von var.

+0

Der Compiler kann glücklich zwischen den überladenen Methoden 'Set_IsMandatory (bool value)' und 'Set_IsMandatory (string value) 'unterscheiden, und wenn Eigenschaften nur [syntaktischer Zucker für die Getter- und Setter-Methoden sind] (http: //programmers.stackexchange. com/a/62395/59429) dann scheint es vernünftig zu sein, zu erlauben, dass Methoden und Eigenschaften den gleichen Namen teilen, solange die resultierenden Signaturen unterschiedlich sind? Ich sehe nicht die "Verwirrung", die du erwähnst, vielleicht denkst du darüber nach, deine Antwort zu erweitern, um mir zu helfen, das zu verstehen? – Ben

+3

@Ben Betrachte eine Eigenschaft 'P', die einen Delegaten für eine Methode zurückgibt, die einen Parameter akzeptiert. Betrachten wir nun in derselben Klasse eine Methode mit dem Namen 'P', die einen Parameter der gleichen Art annimmt. Wenn Sie 'instance.P (x)' schreiben würden, wäre es zweideutig, ob Sie die Methode 'P' aufrufen oder einen Delegaten über die Eigenschaft' P' aufrufen. –

0

Um es einfach zu beantworten, ist es einfach nicht erlaubt. Mitglied (Feld, Eigenschaft und Methode) muss eindeutig sein.

Verwandte Themen