È una pratica scorretta denominare una proprietà / membro uguale al tipo dichiarante in C #?

19

Ad esempio, una classe come:

class Dog { } //never mind that there's nothing in it...

e quindi una proprietà come:

Dog Dog { get; set; }

Mi è stato detto che se non riesco a trovare un nome più fantasioso per questo, allora devo usare:

Dog DogObject { get; set; }

Qualche idea su come nominarli meglio?

    
posta Storm Kiernan 26.09.2013 - 20:06
fonte

3 risposte

21

Potrebbe essere una cattiva pratica, se non fosse per il fatto che è già abbastanza ovvio di cosa stai parlando nel tuo codice, in base al contesto.

Dog = new Dog();

Qual è il costruttore del tipo? Qual è l'oggetto? Non è confuso? OK, che ne dici di

Dog = Dog.Create()?

Qual è l'oggetto? Qual è il metodo statico di fabbrica sul tipo? Non sei ancora confuso? Non pensavo.

L'unica volta che ho visto questo è un potenziale problema è quando l'albero dei nomi diventa piuttosto elaborato, e il compilatore non riesce a capire l'ambiguità, nel qual caso si finisce con qualcosa di simile

Dog = new Some.Namespace.Dog();

In ogni caso, questo dovrebbe accadere solo con le Proprietà Automatiche (e forse le enumerazioni), poiché i nomi delle variabili locali sono sempre camelCased, evitando completamente l'ambiguità.

dog = new Dog();
    
risposta data 26.09.2013 - 20:55
fonte
32

Non solo questa è una pratica ragionevole, il linguaggio è stato specificamente progettato per consentire questo. Cerca le specifiche C # per "Colore colore" per le regole e una giustificazione e vedi

link

per alcuni casi d'angolo interessanti che derivano da questa decisione.

In nessun caso dovresti nominare una proprietà "DogObject" per evitare di chiamarla come il suo tipo; che contraddice direttamente le linee guida di progettazione del framework.

    
risposta data 28.09.2013 - 00:58
fonte
5

È perfettamente corretto chiamarlo Dog e questo è in effetti ciò che Microsoft consiglia nella denominazione della struttura linee guida :

CONSIDER giving a property the same name as its type.

For example, the following property correctly gets and sets an enum value named Color, so the property is named Color.

Ed ecco l'esempio che usano nella guida sopra:

public enum Color {...}
public class Control {
    public Color Color { get {...} set {...} }
}
    
risposta data 03.10.2013 - 18:29
fonte

Leggi altre domande sui tag