Ошибка неоднозначности в C # при использовании свойств - PullRequest
5 голосов
/ 03 августа 2010

Я недавно начал изучать 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 ]

11 голосов
/ 03 августа 2010

У вас есть поле и свойство с одинаковым именем colour.Вот почему компилятор выдает ошибку.

6 голосов
/ 03 августа 2010

ошибка неоднозначности в том, что вы назвали поле и свойство с тем же именем "color". изменить определение свойства, например,

public string Colour
{
 get { return colour;}
 set { colour = value;}
}
5 голосов
/ 03 августа 2010

Вы не можете иметь поле и свойство с одинаковым именем.

Вам необходимо переименовать один из двух colour идентификаторов.

4 голосов
/ 03 августа 2010

В строке

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

1 голос
/ 03 августа 2010

Обратите внимание, что в вашем примере, если вы используете C # 3.0 или выше, вам не нужны эти закрытые поля, и вы можете использовать автоматически реализованные свойства:

Подробнее об этом здесь ...http://msdn.microsoft.com/en-us/library/bb384054.aspx

Это позволит избежать проблем путаницы как программистом, так и компилятором, и улучшит читабельность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...