2010-08-03 4 views
5

Я недавно начал изучать C#. Я только что узнал о свойствах и решил сделать простую программу, чтобы понять их больше. это код, который я написал:Ошибка неоднозначности 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

Что происходит, когда вы используете верхний регистр «C» для свойства Color? –

ответ

11

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

5

У вас не может быть поля и объекта с таким же именем.

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

6

ошибка неоднозначности заключается в том, что вы назвали поле и свойство тем же именем «цвет». изменить определение свойства f.e.

public string Colour 
{ 
get { return colour;} 
set { colour = value;} 
} 
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. Неправильно или неправильно, но, безусловно, легче работать с общепринятыми правилами. (По общему признанию, мое предложение использовать символы подчеркивания для полей не соответствует общепринятому. Однако я не использую общедоступные поля.)

+0

, используя этот способ, будет иметь 2 разных цветовых свойства/переменных. Возможно, пользователю нужен только один (удалить _colour) – RvdK

+0

Да. Вот почему я упомянул в своем ответе: «Заметьте, однако, что у вас, вероятно, есть дублирование здесь в любом случае. Скорее всего, это не ваше намерение иметь как автоматическое свойство Color, так и поле _colour в первую очередь». – Manfred

1

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

Более подробную информацию об этом здесь ... http://msdn.microsoft.com/en-us/library/bb384054.aspx

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