5

我最近开始学习 C#。我刚刚了解了属性,并决定编写一个简单的程序来更多地理解它们。这是我写的代码:

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

我得到一个模棱两可的错误。据我了解,这不应该发生。

4

5 回答 5

11

您有一个同名的字段和一个属性colour。这就是编译器产生错误的原因。

于 2010-08-03T07:41:19.547 回答
6

歧义错误是您将字段和属性命名为同名“颜色”。更改属性定义 fe

public string Colour
{
 get { return colour;}
 set { colour = value;}
}
于 2010-08-03T07:42:28.900 回答
5

您不能同时拥有同名的字段和属性。

您需要重命名两个colour标识符之一。

于 2010-08-03T07:41:59.200 回答
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。没有对错之分,但使用普遍接受的规则肯定更容易。(诚​​然,我对字段使用下划线的建议与普遍接受的不符。但是,我不使用公共字段。)

于 2010-08-03T07:52:14.493 回答
1

请注意,在您的示例中,如果您使用的是 C# 3.0 或更高版本,则您实际上并不需要这些私有字段并且可以使用自动实现的属性:

有关它的更多详细信息... http://msdn.microsoft.com/en-us/library/bb384054.aspx

它将避免程序员和编译器的混淆问题,并提高可读性。

于 2010-08-03T09:09:22.283 回答