在.NET
性質應該是一等公民然而,在IL
code屬性getter和setter作爲get_
屬性名和set_
屬性名實現。爲什麼屬性設置器和getter與get_X和set_X方法衝突?
class Property
{
int Value { get { return 42; } }
int get_Value() { return 6 * 9; }
void set_Value(int i) { } // Error even though Value is a read only property
}
輸出:
錯誤CS0082:類型 'SO.Property' 已經保留了一個被稱爲 '的get_value' 具有相同的參數類型
錯誤CS0082構件:類型「SO。 Property'已經保留了一個名爲'set_Value'的成員具有相同的參數類型
爲什麼des .NET
的igners決定使用可能與用戶代碼衝突的名稱?他們本可以使用非法字符(因爲Java使用$
作爲內部類的東西)。
get_Value()和set_Value()格式也違背了C#命名規則(http://msdn.microsoft.com/zh-cn/library/ms229045.aspx):「不要使用下劃線,連字符或任何其他非字母數字字符。「 這可能正是由於這個問題,但問題是你不應該在你的C#代碼中使用這種格式。 – alastairs 2009-05-20 10:56:10