Zacznę od wyjaśnienia, mój scenariusz w kodzie:C# .NET - Jak mogę uzyskać typeof() do pracy z dziedziczeniem?
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
}
}
Ważną linia zwracać uwagę tutaj jest:
if (c.GetType == typeof(B)) { }
Wierzę, że będzie to w rzeczywistości ocenić na " false ", ponieważ typeof (B) i typeof (C) nie są sobie równe w obu kierunkach. (C jest B, ale B niekoniecznie jest C.)
Ale potrzebuję jakiegoś warunku, który to uwzględni. Jak mogę stwierdzić, czy obiekt jest B, czy cokolwiek z tego wynika?
Nie obchodzi mnie, czy jest to obiekt POZBAWIONY od B, o ile jest tam podstawowa klasa B. I nie mogę przewidzieć, co klasa pochodna może pojawić się w mojej aplikacji. Muszę tylko założyć, że nieznane klasy pochodne mogą istnieć w przyszłości - i dlatego mogę skupić się tylko na upewnieniu się, że klasa bazowa jest tym, czego oczekuję.
Potrzebuję warunku, który wykona dla mnie tę kontrolę. Jak to osiągnąć?
W miarę możliwości należy unikać tego rodzaju logiki. Kiedy musisz określić, jaki jest pochodny typ obiektu, nie korzystasz z polimorfizmu. –
Zobacz mój komentarz na odpowiedź Steven Sudit. – Giffyguy