it-swarm.com.de

Ist es eine schlechte Praxis, eine Eigenschaft / ein Mitglied mit dem deklarierenden Typ in C # zu benennen?

Zum Beispiel eine Klasse wie:

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

und dann eine Eigenschaft wie:

Dog Dog { get; set; }

Mir wurde gesagt, wenn ich keinen einfallsreicheren Namen dafür finden kann, muss ich Folgendes verwenden:

Dog DogObject { get; set; }

Irgendwelche Gedanken darüber, wie man diese besser benennt?

27
Storm Kiernan

Es könnte eine schlechte Praxis sein, wenn es nicht schon ziemlich offensichtlich wäre, wovon Sie in Ihrem Code sprechen, basierend auf dem Kontext.

Dog = new Dog();

Welches ist der Typkonstruktor? Welches ist das Objekt? Nicht verwirrt? OK, wie wäre es

Dog = Dog.Create()?

Welches ist das Objekt? Welches ist die statische Factory-Methode für den Typ? Immer noch nicht verwirrt? Das habe ich nicht gedacht.

Das einzige Mal, dass ich gesehen habe, dass dies ein potenzielles Problem ist, ist, wenn der Namespace-Baum ziemlich ausgefeilt wird und der Compiler die Mehrdeutigkeit nicht herausfinden kann. In diesem Fall haben Sie so etwas wie

Dog = new Some.Namespace.Dog();

In jedem Fall sollte dies nur mit automatischen Eigenschaften (und möglicherweise Aufzählungen) geschehen, da lokale Variablennamen immer camelCased sind, wodurch die Mehrdeutigkeit vollständig vermieden wird.

dog = new Dog();
22
Robert Harvey

Dies ist nicht nur eine vernünftige Praxis, die Sprache wurde speziell entwickelt, um dies zu ermöglichen. Durchsuchen Sie die C # -Spezifikation nach "Farbe Farbe" für die Regeln und eine Begründung und sehen Sie

http://blogs.msdn.com/b/ericlippert/archive/2009/07/06/color-color.aspx

für einige interessante Eckfälle, die sich aus dieser Entscheidung ergeben.

Unter keinen Umständen sollten Sie eine Eigenschaft "DogObject" nennen, um zu vermeiden, dass sie genauso wie ihr Typ aufgerufen wird. das widerspricht direkt den Richtlinien für das Framework-Design.

41
Eric Lippert

Es ist vollkommen in Ordnung, es Dog zu nennen, und dies empfiehlt Microsoft in den Framework-Namensrichtlinien :

Denken Sie daran, einer Eigenschaft den gleichen Namen wie ihrem Typ zu geben.

Mit der folgenden Eigenschaft wird beispielsweise ein Aufzählungswert mit dem Namen Color korrekt abgerufen und festgelegt, sodass die Eigenschaft den Namen Color hat.

Und hier ist das Beispiel, das sie in der obigen Anleitung verwenden:

public enum Color {...}
public class Control {
    public Color Color { get {...} set {...} }
}
7
Isak Savo