2010-08-03 41 views
5

Recientemente comencé a aprender C#. Acabo de enterarme de las propiedades y decidí hacer un programa simple para comprenderlas más. este es el código que he escrito:Error de ambigüedad de C# cuando se usan propiedades

class Dog 
{ 
    private int weight; 
    private string colour; 
    public string colour { get; set; } 
    public Dog(int theWeight, string theColour) 
    { 
     weight = theWeight; 
     colour = theColour; 
    } 
} 

y me sale un error de ambigüedad. Por lo que yo entiendo, esto no debería suceder.

+0

¿Qué sucede cuando usa una 'C' en mayúscula para la propiedad Color? –

Respuesta

11

Tiene un campo y una propiedad con el mismo nombre colour. Es por eso que el compilador produce un error.

5

No puede tener un campo y una propiedad con el mismo nombre.

Debe cambiar el nombre de uno de los dos identificadores colour.

6

error de ambigüedad es que ha nombrado campo y propiedad con el mismo nombre "color". cambiar la definición de propiedad, es decir,

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

En la línea

colour = theColour; 

el compilador no puede decir lo que quiere decir. Podría ser cualquiera

private string colour; 

o podría ser

public string colour { get; set } 

para eliminar la ambigüedad de elegir una convención de nomenclatura diferente ayuda. Por ejemplo, puede elegir que las propiedades tengan una primera letra mayúscula y los campos comiencen con un guión bajo y una letra minúscula. En ese caso, su clase tendría el siguiente aspecto:

class Dog 
{ 
    private int _weight; 
    private string _colour; 
    public string Colour { get; set; } 
    public Dog(int theWeight, string theColour) 
    { 
     _weight = theWeight; 
     _colour = theColour; 
    } 
} 

Sin embargo, tenga en cuenta que probablemente tenga una duplicación aquí. Lo más probable es que no era su intención tener tanto el Color de la propiedad automática como el color del campo en primer lugar.

También puede elegir una herramienta que lo ayude a seguir las pautas recomendadas. Como ejemplo, echa un vistazo a FxCop. No está bien o mal, pero ciertamente es más fácil trabajar con reglas que son generalmente aceptadas. (Es cierto que mi sugerencia de utilizar guiones bajos para los campos no está en línea con lo que generalmente se acepta. Sin embargo, no uso campos públicos)

+0

usando esta forma terminará con 2 propiedades/variables de color diferentes. Probablemente el usuario solo quiere uno (eliminar _colour) – RvdK

+0

Sí. Es por eso que mencioné en mi respuesta: "Tenga en cuenta, sin embargo, que probablemente tenga una duplicación aquí de todos modos. Lo más probable es que no era su intención tener el Color de la propiedad automática y el color del campo en primer lugar". – Manfred

1

Tenga en cuenta que en su ejemplo, si usa C# 3.0 o superior, que realmente no necesita esos campos privados y puede utilizar las propiedades de auto-aplicado:

Más detalles acerca de él aquí ... http://msdn.microsoft.com/en-us/library/bb384054.aspx

se evitará los problemas de confusión, ya sea por el programador y el compilador, y mejorar la legibilidad

Cuestiones relacionadas