使用属性时的C#歧义错误

使用属性时的C#歧义错误,c#,properties,ambiguity,C#,Properties,Ambiguity,我最近开始学习C。我刚刚学习了属性,并决定制作一个简单的程序,以便更好地理解它们。 这是我写的代码: class Dog { private int weight; private string colour; public string colour { get; set; } public Dog(int theWeight, string theColour) { weight = theWeight; colou

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

  class Dog
{
    private int weight;
    private string colour;
    public string colour { get; set; }
    public Dog(int theWeight, string theColour)
    {
        weight = theWeight;
        colour = theColour;
    }
}
我得到一个模糊错误。
据我所知,这不应该发生。

您有一个字段和一个属性,它们的名称和颜色都相同。这就是编译器产生错误的原因

字段和属性不能同时具有相同的名称


您需要重命名两个
颜色
标识符中的一个。

歧义错误是您将字段和属性命名为相同的名称“颜色”。 更改特性定义f.e

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

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;
   }
}
不过请注意,无论如何,这里可能有一个副本。很有可能,您最初并不打算同时使用自动属性颜色和字段颜色


您还可以选择一个工具来帮助您遵循推荐的指导原则。作为一个例子,我们来看看。没有对错之分,但使用普遍接受的规则显然更容易。(无可否认,我对字段使用下划线的建议与普遍接受的做法不符。但是,我不使用公共字段。)

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

更多关于它的细节在这里。。。


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

当属性颜色使用大写字母“C”时会发生什么情况?使用这种方式将得到两个不同的颜色属性/变量。可能用户只需要一个(删除颜色)是。这就是我在回答中提到的原因:“不过,请注意,您可能在这里有一个副本。很可能您并不打算同时使用自动属性颜色和字段颜色。”