Jedes Element hat eine Schnittstelle, IItem
. Darüber hinaus gibt es eine Schnittstelle, die als IDrawableItem
die von Item erbt.
Der folgende Code versucht, ein zeichenbares Element zu zeichnen, kann dies aber nicht, da die Sammlung, die diese Klasse speichert, nur IItem
. Sie können alles hinzufügen, was von IItem
zu dieser Klasse, aber die Verwendung anderer Methoden kann nur durch Casting erreicht werden.
foreach (var item in Items) {
item.Draw(); // The casting would go here.
}
Ich weiß, wie man wirft, as
usw. ... aber ist das akzeptabel? Ist es eine bewährte Praxis?
Ich frage mich nur, ob es andere Möglichkeiten gibt, mit solchen Szenarien umzugehen.
0 Stimmen
Der folgende Code versucht, ein zeichenbares Element zu zeichnen, kann dies aber nicht, da die Sammlung dieser Klasse nur IItem akzeptiert. - WARUM? Erzählen Sie uns ein wenig über das Design. Können Sie es ändern?
0 Stimmen
Jasons Code wird Sie aus Ihrem Dilemma befreien. Die Frage ist, ob dies das richtige Design für Ihre Objekte ist, und das ist wirklich schwer zu sagen, von 2 Zeilen der Beschreibung.
0 Stimmen
Vielleicht verwenden Sie eine Sammlung, die IDrawbleItem s stattdessen speichert?
0 Stimmen
Dies ist nur ein schneller Prototyp, der sich noch ändern kann. Ich kann keine Liste von zeichenbaren Elementen verwenden, da es eine andere Art von Element gibt, das möglicherweise hinzugefügt werden könnte.