Okt 272014
 

Hattet ihr auch schon einmal das Problem, dass ihr in eurer Software eine Enumeration verwenden wolltet, aber eigentlich zwei Enumeration benötigt wurden, weil ein anderer Programmteil mehr Werte benötigt? Ich schon :-). In meinem Fall ging es um Messbereiche von unterschiedlichen Hardwaregeräten. Zum Beispiel besitzt Gerät A die Messbereiche „Low“ und „High“, während Gerät B die Messbereiche „Low“, „High“, „Medium“ und „Aux“. Der Entwickler soll in seinem Programm aber nicht mit der Hardwareabhängigkeit konfrontiert werden und wählt über den Namespace das entsprechende Gerät und damit auch die Implementierung der Enumeration.
Da „Low“ und „High“ die gemeinsamen Messbereiche abbilden, werden sie in der Hauptklasse verwendet, von der alle Erweiterungen dann ableiten. Der eigentliche Trick besteht aber darin, dass diese Klasse statische Klassenvariablen anbietet, die nur innerhalb dieser Klasse und ihrer Ableitungen initialisiert werden können. Überläd man außerdem noch die Operatoren kann man auch einfach die Werte miteinander vergleichen. Hier ein Beispiel, wie diese Klasse aussehen könnte:

Möchte man diese Klasse nun erweitern, braucht man nur eine neue Klasse anlegen, die von dieser Klasse ableitet und den Konstruktor der Basisklasse aufrufen. Hier das Beispiel für das oben genannte Gerät B:

Im Hauptprogramm kann man jetzt einfach eine Variable vom Typ „MeasurementRange“ deklarieren und die statischen Variablen der beiden Klassen zuweisen. Dabei ist es vollkommen egal, von welcher Klasse die statischen Variablen herkommen. Nachfolgend ein paar Zeilen Programmcode, die das auch noch verdeutlichen:

Für unsere Implementierung war das genau der richtige Ansatz. Solltet ihr das Extendable Enum in einem eurer Projekte einsetzen oder andere (elegantere?) Ansätze für das Problem haben, dann schreibt doch einen Kommentar. Würde mich freuen :-).

 

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

(required)

(required)

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen