我最近开始学习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 :(得分: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
它将避免程序员和编译器之间的混淆问题,并提高可读性。