Hallo,
ich refaktorisiere gerade ein wenig und habe nun eine .cs Datei die FormManager heißt, darin ist eine Klasse die FormManager heißt.
Nun habe ich eine Klasse, die ein Property des Typs FormManager braucht. Üblicherweise sind Properties ja groß geschrieben, was bei mir zu dem Ergebnis führt, dass ich folgendes habe:
public FormManager FormManager { get; private set; }
Tja, Klasse und Instanz heißen hier gleich, was nicht geht. Aber ich finde den Klassennamen so eindeutig, dass die Instanz auch so heißen sollte, da ein public Property aber nun mal groß geschrieben wird, habe ich ein Problem.
Wie macht ihr so etwas? Ich will ungern die Instanz als "Forms" bezeichnen, weil ich gerade gemerkt habe, dass alleine das Wochenende dazwischen gereicht hat, um die Verbindung zwischen dem Namen und der Tatsache, dass es ein Manager ist, zu vergessen.
(Es war kein Alkohol im Spiel 😃 )
Life is a short
Zum Glück ist C# was das angeht äußerst ausführlich und präzise definiert - daher kein Problem aus Compiler-Sicht, wenn du das ganze genau so schreibst.
Alles andere ist, wie so oft im Leben, einfach nur Geschmackssache.
Hallo Seikilos,
Benutze einfach den FullQualifiedName von deinem FormManager, dann kannst du das Property sicher ohne Probleme "richtig" benennen.
((Falls der FormManager im Namespace Seikilos liegen würde:))
public Seikilos.FormManager FormManager { get; private set; }
Gruß
Juy Juka
Ich finde es etwas unsinnig, Properties nach ihrem genauen Zweck zu benennen, wenn die Klasse schon einen Teil vorgibt.
Klasse "Form" -> Propety "Manager".
Edit:
Benutze einfach den FullQualifiedName von deinem FormManager
Das Problem liegt hier zwischen Klasse und Propertyname (und nicht Typ).
> Codejunky <
Danke für euer Feedback. Ich werde es mal so versuchen.
@JunkyXL: Ich habe leider nicht verstanden was du meinst.
Life is a short
Wenn du ein Property in deiner Form-Klasse hast, muss es nicht noch mit Form... im Namen beginnen. Das hat eine gewisse Zweideutigkeit. So sehe ich das.
> Codejunky <
... wobei solche Namenszusätze wie "Manager" namenstechnisch nicht gerade allzu auskunftsfreudig sind 😉
... wobei solche Namenszusätze wie "Manager" namenstechnisch nicht gerade allzu auskunftsfreudig sind
Siehe http://www.classnamer.com/. Ein Page-Refresh gibt einen neuen Namen.
Sehe den Sinn der Website irgendwie nicht... Ich mein Zufallsklassennamen bringen einen doch kein Stück weiter... schon garnicht Klassennamen wie: MultipleCacheFactoryFactory
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Ich mein Zufallsklassennamen bringen einen doch kein Stück weite
Eben! Die generierten Klassennamen (bzw. die Prä- und Suffixe) sind meistens absolut nichtssagend. Nur leider werden solche "Anhängsel" wie "Manager", etc. dennoch in der Praxis gern verwendet.
Hallo!
offtopic:
Wenn man nicht genau weis, was es macht, nennt man es Manager (trifft nicht nur auf Software zu)
Nobody is perfect. I'm sad, i'm not nobody 🙁
Hallo Seikilos,
mir scheint die Antwort von BhaaL etwas untergegangen zu sein. Der Code
public class C
{
public FormManager FormManager { get; private set; }
}
kompiliert wunderbar. C# kann also durchaus zwischen dem Namen des Typs der Property und dem Namen der Property unterscheiden.
Nur bei
public class FormManager // <== hier
{
public FormManager FormManager { get; private set; }
}
gibt es was auf die Finger:
Fehlermeldung:
error CS0542: "FormManager": Membernamen dürfen nicht mit dem Namen des sie einschließenden Typs identisch sein.
Das hat aber nichts damit zu tun, dass der Name des Typ der Property und der Name der Property nicht identisch sein dürfen, sondern dass man in der Klasse FormManager keine Property gleichen Namens definieren darf, egal wie der Typ der Property ist, weil der Name der Klasse innerhalb der Klasse dem Konstruktor vorbehalten ist.
Meines Erachtens macht es auch keinen Sinn, in der Klasse eine Property mit dem Namen der Klasse zu haben. Wieso hat die Klasse eigentlich eine Instanz von sich selbst? Weil sie ein Singleton ist? Dann sollte die Property eher Instance heißen.
herbivore
Meines Erachtens macht es auch keinen Sinn, in der Klasse eine Property mit dem Namen der Klasse zu haben. Wieso hat die Klasse eigentlich eine Instanz von sich selbst?
Hmm, das ist so nicht gesagt das es eine Instanz von sich selbst ist.
Ich muss auch zugeben, ich habe auch oft das Problem das ich eine Klasse schreibe und diese bestmöglich benenne. Direkt im Anschluss verwende ich ein Objekt der Klasse als Property und stelle fest das der Name der Klasse eigentlich der perfekte Property Name ist, dann benenne ich die Klasse gerne nochmal um da ich die Namesgleichheit von Typ und Propertyname ebenfalls nicht gut heisse.
Hallo Sebastian.Lange,
das ist so nicht gesagt das es eine Instanz von sich selbst ist.
ich finde schon, denn nur dann tritt ja mit dem geposteten Code ein Fehler auf. Siehe meinen Beitrag weiter oben. In Kurzform: Der Name des Typ einer Property und der Name der Property dürfen gleich heißen, aber es darf keine Property so heißen, wie die umgebende Klasse. Da nun der Typ der Property genauso heißen soll, wie die Property selbst (was er ja darf), reden wir also wohl darüber, dass eine Klasse eine Property vom Typ der Klasse selbst enthält.
Hallo zusammen,
vom konkreten Fall abgesehen, erlaubt nicht nur der Compiler Propertys bei denen Name und Name des Typs übereinstimmen, sondern sie sind auch nach den Namenskonventionen durchaus erlaubt, allerdings mit klarem Fokus auf Enumerationen und davon wird auch im .NET-Framework an verschiedenen Stellen Gebrauch gemacht.
Möglicherweise empfiehlt es sich, für eine Eigenschaft den gleichen Namen wie für ihren Typ festzulegen.
Wenn eine Eigenschaft eine starke Typisierung als Enumeration aufweist, kann der Name der Eigenschaft mit dem Namen der Enumeration übereinstimmen. Wenn beispielsweise der Name einer Enumeration CacheLevel lautet, kann eine Eigenschaft, die einen der Enumerationswerte zurückgibt, ebenfalls CacheLevel lauten.
Für Parameternamen (und m.E. lässt sich das auch auf die meisten Fälle von Variablen- und Propertynamen generalisieren) gilt das Umgekehrte:
Verwenden Sie Namen, die auf der Bedeutung des Parameters und nicht auf dem Typ des Parameters beruhen.
Der Typ des Parameters wird i. d. R. in Entwicklertools und der Dokumentation angegeben. Wenn Sie einen Namen wählen, der die Verwendung oder Bedeutung des Parameters beschreibt, geben Sie Entwicklern wertvolle Informationen an die Hand, die ihnen das Identifizieren des richtigen Members für ihre Aufgabe und der geeigneten Daten zum Übergeben an den Member erleichtern.Verwenden Sie beschreibende Parameternamen.
In den meisten Szenarien sollten der Name des Parameters und sein Typ ausreichen, um die Verwendung des Parameters zu bestimmen.
Es ist also immer eine Abwägungsfrage.
herbivore
Hallo alle,
danke für die ausführliche Erklärung.
Es ist in der Tat so, dass das Property nicht teil der eigenen Klasse ist, sondern von einem Manager (scherz 😄)
Ich glaub mein Fehler lag darin, dass ich der vorkompilierten Sicht von Visual Studio vertraut habe. Das Property hatte ich auch erzeugt, bei der Initialisierung habe ich
"FormManager =" geschrieben und er hat mir das Property gehighlighted, als wäre es eine Klasse (also in den Standardeinstellungen blau dargestellt)
Da hab ich es nicht weiter versucht, weil es schon nach einem Fehler aussah.
Nun, dem wahr wohl nicht so 😃
this. hätte ich auch mal testen können.
Naja, nun weiß ich auf jeden Fall sicher, dass es geht und auch nicht ein Designfehler von mir wäre, wenn ich das mache 😃
Danke
Edit: Bezüglich des MSDN Ausschnitts: Bei mir beschreibt FormManager auch seine Funktion. Er instantiiert und verwaltet alle Dialog und Formen in der Anwendung.
Gibt es da einen treffenderen Namen?
Life is a short
Wenn dem so ist, dann hat der aber nix innerhalb einer Form zu suchen. Ich würde diesen "Manager" eher statisch in der Anwendung bereitstellen, worauf sich dann jede Form beim Instanziieren registriert.
> Codejunky <
Der ist auch nicht in einer Form, er ist ein einer Plugin-Einsprungspunkt Klasse, die alle Ressourcen verwaltet
Life is a short
Wie lustig ich habe diesen Beitrag erst nicht gefunden und angefangen ein neues Thema zu erstellt: Namensgebung: Property-Name == Klassenname
Das habe ich dann nochmal in die Suche reinkopiert und das hier gefunden.
Was ich noch nicht verstanden habe, wie könnten denn alternative Namensgebungen sein. Nehmen wir einfach ein Beispiel:
_class Auto _und class Garage
Bei einer DoppelGarage würde ich das Property List<Auto> Autos verwenden, oder LinkesAuto, RechtesAuto.
Bei einer Einzelgarage würde ich das Property Auto nennen, also genauso wie die Klasse. Aber wie wäre die Alternative dazu? Anderer Klassenname? Oder AutoInstanz oder wie oder was?
Gruß, Alf
Aber wie wäre die Alternative dazu? Anderer Klassenname? Oder AutoInstanz oder wie oder was?
Wie sagt man so schön:
There are only two hard problems in Computer Science: cache invalidation, naming things and off-by-one errors
In diesem Fall also das zweite 😉
Spontan würden mir jetzt Inhalt (eher geeignet in Garagen, die auch Fahrräder etc. zulassen) oder AbgestelltesAuto einfallen.
There are only two hard problems in Computer Science: cache invalidation, naming things and off-by-one errors
Hahaha 😁
Spontan würden mir jetzt Inhalt (eher geeignet in Garagen, die auch Fahrräder etc. zulassen) oder AbgestelltesAuto einfallen.
Das ist doch schon mal was und ich glaube auch der Weg in die richtige Richtung, weil Property und Klasse sollten imho nicht gleich heißen, auch wenns geht.
Für meinen Problem passt das abgestellte Auto sehr gut. Vielen Dank!
Hallo Alf Ator,
zur Technik möchte ich nochmal auf mein ersten Beitrag weiter oben verweisen. In der Klasse Garage kann man ohne weiteres eine Property Auto vom Typ Auto deklarieren. Eine alternative Namensgebung ist also aus technischen Gründen gar nicht nötig (also AbgestelltesAuto), sondern nur aus inhaltlichen Gründen (also Inhalt, weil in der Garage nicht nur (genau) ein Auto abgestellt werden kann). Zur inhaltlichen Namensgebung möchte ich nochmal auf mein zweiten Beitrag weiter oben verweisen.
herbivore