Entwickler-Ecke

C# - Die Sprache - Property-Namen bei generischen Klassen


Ares - Mo 18.10.10 09:14
Titel: Property-Namen bei generischen Klassen
Hallo!

Bei einem aktuellen Projekt benötige ich an verschiedenen Stellen eine unterschiedliche Klassen, die jeweils unterschiedliche ein Objektpaare speichern. Die Objektpaar können z.B. ein Schlüssel und ein Wert, zwei Koordinaten, ein Datum und ein Ort, ein Benutzer und ein Passwort, etc. sein. Es geht also um ganz unterschiedliche Typen:

Nun kann man natürlich für jedes mögliche Objektpaar eine eigene Klasse schreiben die diese aufnimmt. Da sich nur die verwendeten Typen unterschieden wäre aber aber eine generische Klasse wesentlich sinnvoller. KeyValuePair<> wäre z.B. solche eine fertige Klasse die verwendet werden könnte.

Das Problem hierbei ist aber, dass KeyValuePair den Zugriff über die Eigenschaften "Key" und "Value" ermöglicht. Soll nun aber kein Key-Value Paar gespeichert werden ein Benutzer und ein Passwort, wäre der Zugriff auf diese über "Key" und "Value" nicht gerade intuitiv. Der Benutzer ist kein Key, und das Passwort ist kein Value... Entsprechender Code wäre wohl recht unleserlich...

Natürlich kann ich eine eigene generische Klasse schreiben, bei der die Eigenschaften "Value1" und "Value2" heißen. Das wäre aber nur wenig besser.

Gibt es stattdessen nicht die Möglichkeit auch die Namen von Eigenschaften bei einer Generischen Klassen anzugeben? Also nicht nur "KeyValuePair<string, string>" sondern etwas wie "KeyValuePair<string [Username], string [Password]>"...?

Besten Dank
Ares


danielf - Mo 18.10.10 11:04

Hallo,

nicht das ich wüsste, aber Key und Value ist durchaus "intuitiv" da es seit Jahren die Standardformulierung ist. Es ist halt abhängig wie du den "Speicher" nennst. Sagst du einfach KeyValueCollection hat man natürlich Schwierigkeiten die Zuordnung zu verstehen. Nennst du es UserPasswordDictionary versteht man es wohl eher. Darüber hinaus denke ich, dass Objekte mehr Sinn als Strings machen, z.B. Dictionary<User, Password> bzw. Dictionary<User, string>. Dann ist der Schlüssel klar.

Gruß


Kha - Mo 18.10.10 21:16

user profile iconAres hat folgendes geschrieben Zum zitierten Posting springen:
Gibt es stattdessen nicht die Möglichkeit auch die Namen von Eigenschaften bei einer Generischen Klassen anzugeben?
Das wären dann wohl eher Templates von C++. Aber da du bei einer eigenen Klasse in fünf läppischen Zeilen beschreibende Property-Namen und Klassen-Name bekommst, sehe ich da wirklich wenig Verlust ;) .