Entwickler-Ecke
Sonstiges (.NET) - Auswahl aus mehreren Klassen
daniel1mtb - Mi 24.02.16 19:15
Titel: Auswahl aus mehreren Klassen
Hallo Zusammen,
hab eine frage bezüglich Klassen. Als beispiel:
Ich habe eine Klasse "Tier" diese vererbt an 10 weitere Klassen "Löwe", "Tiger", "Reh" ....(usw.) ihere eigenschaften.
So jetzt kann man zu beginn meines Programms eins dieser Tiere auswählen.
Je nach dem welches man gewählt hat, hat man jetzt eins dieser Tiere auf dem Bildschirm mit den zugehörigen Daten blablabla.
Wie mach ich das jetzt im meinem Code elegant sodas ich nicht 10 if abfragen habe welches Tier gewählt wurde sondern das irgendwie nur die zugehörige Klasse übergeben wird.
Hoffentlich versteht Ihr mein Problem^^
Vielen dank im vorraus.
jfheins - Mi 24.02.16 19:51
Guten Abend :)
Der Inhalt, der in diesen if-Abfragen käme, wird in die Klassen hinein verlagert. In der Basisklasse wird die Methode oder Property vordefiniert oder abstrakt deklariert, und dann in den anderen Klassen überschrieben.
Also im einfachsten Fall statt
C#-Quelltext
1: 2: 3: 4: 5:
| if Tier is Reh name = 'Reh'; else if Tier is Hirsch name = 'Hirsch'; else if ... |
sowas hier:
Durch das überschreiben (Schlüsselwort override) wird dann automatisch die richtige Property ausgelesen
daniel1mtb - Mi 24.02.16 20:51
Oki vielen Dank! :) Hört sich schon mal viel versprechent an^^
Werd es mal aus probieren.
FinnO - Mi 24.02.16 21:07
Moin,
ich würde das in der Regel als
interface umsetzen, da eine Klasse mehrere Interfaces implementieren, jedoch nur von einer einzigen (abstrakten) Klasse abgeleitet sein kann. Das Verhalten,
welches hier ausgenutzt wird, nennt man übrigens Polymorphie :idea:. Da in C# auch Eigenschaften über Interfaces definiert werden können, gibt es regelmäßig keinen Grund, abstrakte Klassen zu verwenden.
Ich habe da mal was vorbereitet:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| using System;
namespace PolymorphDemo { interface ITier { string Name { get; } }
class Hirsch : ITier { public string Name { get { return nameof(Hirsch); } } }
class Giraffe : ITier { public string Name { get { return nameof(Giraffe); } } }
class Program { static void Main(string[] args) { ITier g = new Giraffe(); ITier h = new Hirsch();
Console.WriteLine(g.Name); Console.WriteLine(h.Name);
Console.ReadLine(); } } } |
Viele Grüße
Ralf Jansen - Mi 24.02.16 21:42
Zitat: |
Hoffentlich versteht Ihr mein Problem^^ |
Vermutlich nicht.
Zitat: |
Je nach dem welches man gewählt hat, hat man jetzt eins dieser Tiere auf dem Bildschirm mit den zugehörigen Daten blablabla.
Wie mach ich das jetzt im meinem Code elegant sodas ich nicht 10 if abfragen habe welches Tier gewählt wurde sondern das irgendwie nur die zugehörige Klasse übergeben wird. |
Das kannst du vielleicht mit ein bisschen Code für uns verdeutlichen. Für mich ist die UI bereits mit einer Instanz von "Löwe", "Tiger", "Reh" verknüpft du hast also bereits eine wenn du in der UI etwas auswählst.
Wenn du die weitergeben willst gibst du die halt als Parameter des Typ Tier weiter. Es sind ja alles Ableitung von Tier. Ich sehe also gar kein Problem das es zu lösen gibt nachdem du fragst.
Also zeig was du da hast und am besten was du in der UI hast an Code und an wenn du das warum weitergeben willst.
daniel1mtb - Mi 24.02.16 22:18
@FinnO
Vielen dank für deine umfrangreiche Antwort! Dein Code werd ich auch mal testen sieht mir auch sehr schlüssig aus. :)
Meine Frage hat sich somit geklärt vielen dank!!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!