В строке
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 . Здесь нет правильного или неправильного, но, безусловно, легче работать с общепринятыми правилами. (По общему признанию, мое предложение использовать подчеркивание для полей не соответствует общепринятому. Однако я не использую открытые поля.)