Часто, когда вам нужно проверить тип объекта, это может быть признаком того, что в вашем дизайне что-то не так. Объектно-ориентированное программирование дает нам возможность избежать подобных конструкций посредством полиморфизма.
Не было бы лучше, если бы A, B и C реализовали тела ваших предложенных операторов if в интерфейсе базового класса, так что вам не нужно тестировать вверх по течению?
Например:
abstract class A
{
public virtual void SomeBehavior()
{
Console.WriteLine("default behavior");
}
}
class B:A
{
public override void SomeBehavior()
{
Console.WriteLine("type specific behavior");
}
}
class C:A
{
public override void SomeBehavior()
{
Console.WriteLine("different behavior");
}
}
class D:A{}
void Main()
{
IEnumerable<A> myCollection=new A[]{new B(),new C(),new D()};
foreach(A item in myCollection)
{
item.SomeBehavior();
}
}
Существует, по определению, не чистый способ сделать это. Конечно, вам нужен виртуальный метод. –
Ну просто чище, чем моя уродливая, если цепь. :) – jdelator