2010-08-03 44 views
5

我最近開始學習C#。我剛剛瞭解到屬性,並決定製作一個簡單的程序,以便更多地瞭解它們。 這是我寫的代碼:使用屬性時出現C#歧義錯誤

class Dog 
{ 
    private int weight; 
    private string colour; 
    public string colour { get; set; } 
    public Dog(int theWeight, string theColour) 
    { 
     weight = theWeight; 
     colour = theColour; 
    } 
} 

,我得到一個含糊不清的錯誤。 據我瞭解,這不應該發生。

+0

當您對屬性Color使用大寫'C'時會發生什麼?使用這種方法的 – 2010-08-03 07:42:35

回答

11

你有一個字段和一個同名的房產colour。這就是編譯器產生錯誤的原因。

5

你不能同時擁有一個字段和一個屬性。

您需要重命名兩個colour標識符中的一個。

6

歧義錯誤是您命名字段和屬性相同的名稱「顏色」。 更改屬性定義f.e.

public string Colour 
{ 
get { return colour;} 
set { colour = value;} 
} 
4

在行

colour = theColour; 

編譯器不能告訴你是什麼意思。它可以是

private string colour; 

,也可能是

public string colour { get; set } 

要消除歧義選擇不同的命名約定幫助。例如,您可以選擇屬性具有大寫首字母,字段以下劃線和小寫字母開頭。在這種情況下,你的類將如下所示:

class Dog 
{ 
    private int _weight; 
    private string _colour; 
    public string Colour { get; set; } 
    public Dog(int theWeight, string theColour) 
    { 
     _weight = theWeight; 
     _colour = theColour; 
    } 
} 

注意,雖然,你可能有一個重複,這裏反正。有可能是你並不打算將自動屬性Color和字段_colour放在首位。

您也可以選擇一個工具來幫助您遵循建議的指導原則。作爲一個例子,看看FxCop。沒有對錯,但通過公認的規則工作肯定更容易。 (無可否認,我在字段中使用下劃線的建議不符合通常所接受的內容,但我不使用公共字段。)

+0

將以2種不同的顏色屬性/變量結束。可能用戶只需要一個(刪除_colour) – RvdK 2010-08-03 08:21:57

+0

是的。這就是爲什麼我在我的回答中提到:「但請注意,無論如何,您可能在這裏有重複,很可能您並不打算將自動屬性Color和字段_colour放在首位。」 – Manfred 2010-08-03 08:43:33

1

請注意,在您的示例中,如果您使用的是C#3.0或更高版本,你並不真的需要那些私人領域,並可以使用自動實現的屬性:

更多關於它的細節在這裏... http://msdn.microsoft.com/en-us/library/bb384054.aspx

這將避免混亂的問題,無論是通過編程器和編譯器,並提高可讀性。