2013-03-20 134 views
9

我有包含屬性的類:C#中的屬性名稱和方法名稱可以相同嗎?

public bool IsMandatory {get;set;} 

現在我加入的方法IsMandatory(string str)

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

我得到的是

類型已經包含了「IsMandatory」

不能的方法名和屬性名相同的是定義一個編譯時錯誤在C#中?我們以不同的方式使用方法和屬性,爲什麼這給編譯錯誤?

+6

如果編譯器告訴你不能,那實際上是在問什麼?爲什麼你不能? – 2013-03-20 11:28:38

+1

@TimRogers,是的,我問我們爲什麼不能? – Brij 2013-03-20 11:30:10

+1

它怎麼知道你打算打電話給哪一個? – 2013-03-20 11:31:55

回答

13

這是一個編譯器錯誤,因爲如果名稱可能相同,會引起混淆。在某些情況下,可能會導致模糊性 - 例如,使用Action委託等時,方法不需要有括號,並且使用var

+0

編譯器可以很好地區分重載的方法Set_IsMandatory(bool value)和Set_IsMandatory(string value),並且如果屬性只是[getter和setter方法的語法糖](http://programmers.stackexchange。 com/a/62395/59429),只要結果簽名不同,允許方法和屬性共享相同的名稱似乎是合理的?我沒有看到你提到的「混亂」,也許你可能會考慮擴大你的答案來幫助我理解? – Ben 2015-10-05 16:34:04

+3

@Ben考慮一個屬性,'P'返回一個參數的方法的委託。現在考慮在同一個類中有一個名爲'P'的方法,它接受一個相同類型的參數。如果您要編寫'instance.P(x)',那麼您是否調用方法'P'或通過屬性'P'調用委託將是不明確的。 – 2015-10-05 16:58:43

0

爲了讓答案容易,這是不允許的。成員(字段,屬性和方法)必須是 唯一。

相關問題