使用属性时出现C#模糊错误

时间:2010-08-03 07:39:36

标签: 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;
        colour = theColour;
    }
}

我得到一个含糊不清的错误。 据我所知,这不应该发生。

5 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:6)

歧义错误是你命名字段和属性同名“颜色”。 更改属性定义f.e。

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

答案 2 :(得分:5)

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

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

答案 3 :(得分: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。没有对错,但使用普遍接受的规则肯定更容易。 (不可否认,我在字段中使用下划线的建议与普遍接受的内容不符。但是,我不使用公共字段。)

答案 4 :(得分:1)

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

这里有关于它的更多细节...... http://msdn.microsoft.com/en-us/library/bb384054.aspx

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