2010-08-03 6 views
5

Ho iniziato recentemente a imparare C#. Ho appena saputo delle proprietà e ho deciso di creare un programma semplice per comprenderle di più. questo è il codice che ho scritto:Errore ambiguità C# quando vengono utilizzate le proprietà

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

e ottengo un errore di ambiguità. Per quanto ho capito, questo non dovrebbe accadere.

+0

Cosa succede quando si utilizza una "C" maiuscola per la proprietà Colore? –

risposta

11

Hai un campo e una proprietà con lo stesso nome colour. Questo è il motivo per cui il compilatore produce un errore.

5

Non è possibile avere sia un campo che una proprietà con lo stesso nome.

È necessario rinominare uno dei due identificatori colour.

6

errore di ambiguità è che è stato denominato campo e proprietà lo stesso nome "colore". cambia la definizione della proprietà per es.

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

Nella linea

colour = theColour; 

il compilatore non può dire quello che vuoi dire. Potrebbe essere sia

private string colour; 

o potrebbe essere

public string colour { get; set } 

per disambiguare la scelta di una diversa convenzione di denominazione aiuta. Ad esempio, è possibile scegliere che le proprietà abbiano una prima lettera maiuscola e che i campi inizino con un trattino basso e una lettera minuscola. In questo caso, la classe avrà il seguente aspetto:

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

Nota, tuttavia, probabilmente si ha comunque una duplicazione. È probabile che non fosse tua intenzione avere sia la proprietà automatica Colore che il campo _colore in primo luogo.

Puoi anche scegliere uno strumento che ti aiuti a seguire le linee guida consigliate. Ad esempio dare un'occhiata a FxCop. Non c'è giusto o sbagliato, ma è certamente più facile lavorare con regole generalmente accettate. (Il mio suggerimento di utilizzare i caratteri di sottolineatura per i campi non è in linea con ciò che è generalmente accettato.Tuttavia, non utilizzo campi pubblici.)

+0

in questo modo finirà con 2 diverse proprietà/variabili di colore. Probabilmente l'utente ne vuole solo uno (rimuovi _colour) – RvdK

+0

Sì. Questo è il motivo per cui ho accennato alla mia risposta: "Nota, comunque, che probabilmente hai una duplicazione in ogni caso. Probabilmente non era tua intenzione avere sia la proprietà automatica Color che il campo _colour in primo luogo." – Manfred

1

Nota che nel tuo esempio, se stai utilizzando C# 3.0 o superiore, non si ha realmente bisogno di quei campi privati ​​e possibile utilizzare auto-implementato proprietà:

Maggiori dettagli su di esso qui ... http://msdn.microsoft.com/en-us/library/bb384054.aspx

si eviterà i problemi confusione, né dal programmatore e il compilatore, e migliorare la leggibilità.

Problemi correlati