ich mit der Erklärung, mein Szenario in Code beginnt:C# .NET - Wie bekomme ich typeof() um mit Vererbung zu arbeiten?
public class A { }
public class B : A { }
public class C : B { }
public class D { }
public class Test
{
private A a = new A () ;
private B b = new B () ;
private C c = new C () ;
private D d = new D () ;
public Test ()
{
// Evaluates to "false"
if (a.GetType == typeof(B)) { } //TODO: Add Logic
// Evaluates to "true"
if (b.GetType == typeof(B)) { } //TODO: Add Logic
// I WANT this to evaluate to "true"
if (c.GetType == typeof(B)) { } //TODO: Add Logic
// Evaluates to "false"
if (d.GetType == typeof(B)) { } //TODO: Add Logic
}
}
Die wichtige Linie von hier zu beachten ist:
if (c.GetType == typeof(B)) { }
Ich glaube, dass dies in der Tat beurteilen zu " false ", da Typ (B) und Typ (C) in beiden Richtungen nicht gleich sind. (C ist ein B, aber B ist nicht unbedingt ein C.)
Aber was ich brauche, ist eine Art von Bedingung, die dies berücksichtigen wird. Wie kann ich feststellen, ob ein Objekt ein B oder etwas davon ist?
Es ist mir egal, ob es sich um ein von B abgeleitetes Objekt handelt, solange die Basis B-Klasse da ist. Und ich kann nicht voraussehen, welche abgeleitete Klasse in meiner Anwendung angezeigt werden könnte. Ich muss einfach davon ausgehen, dass in Zukunft unbekannte Klassen existieren werden - und deshalb kann ich mich nur darauf konzentrieren, sicherzustellen, dass die Basisklasse das ist, was ich erwarte.
Ich brauche eine Bedingung, die diese Prüfung für mich durchführen wird. Wie kann dies erreicht werden?
Sie sollten diese Art von Logik wo möglich vermeiden. Wenn Sie feststellen müssen, was der abgeleitete Typ eines Objekts ist, verwenden Sie den Polymorphismus nicht gut. –
Siehe meinen Kommentar zu Steven Sudits Antwort. – Giffyguy