werfen Ich muss Objekt auf einen der Typen, die bestimmte Eigenschaft und Methode haben, werfen. Zuerst muss ich überprüfen, ob mein Objekt eine Instanz eines dieser Typen ist, und dann muss ich es auf diesen Typ umwandeln und einige Aktionen ausführen.Wie man Objekt zum Eingeben von C#
Wie kann ich es tun, ohne Code zu wiederholen?
var foo = GetAnimalById(animalId); // Animal type returned to foo
var animal = new Animal(); // Animal class hasn't Age property and GiveVitamins method
if (foo is Tiger) {
animal = foo as Tiger;
if (animal.Age >= 10)
{
animal.GiveVitamins();
}
}
if (foo is Lion) {
animal = foo as Lion;
if (animal.Age >= 10)
{
animal.GiveVitamins();
}
}
if (foo is Monkey) {
animal = foo as Monkey;
if (animal.Age >= 10)
{
animal.GiveVitamins();
}
}
Es ist ein dynamisches Dispatch Beispiel 'dynamic', aber ich werde das jetzt verlassen. Es sieht so aus, als ob alle Tiere die Mitglieder 'Age' und' GiveVitamins' teilen könnten. Warum also nicht diejenigen, die zur Basisklasse "Animal" gehören? –
Ich denke, hier stimmt etwas nicht mit dem Design. Warum ist die Eigenschaft "Alter" in der Klasse "Tier" nicht vorhanden? Kannst du ein Tier nennen, das nicht alt wird? – Sweeper
Wenn Sie 'Age' und' GiveVitamines' nicht zu 'Animal' verschieben können, sollten Sie' Tiger', 'Lion' und' Monkey' diese Schnittstelle implementieren und nach dieser Implementierung suchen. –