测试对象是否在一组对象中的最佳方法?

jde*_*tor 0 .net c# oop

我试图避免使用长期的if语句.

假设我有一个对象,我想测试它是ClassA,ClassB,ClassC等类型.?

这样做的干净方法是什么?

spe*_*der 5

通常,当您必须测试对象的类型时,它可能表明您的设计存在问题.面向对象编程为我们提供了通过多态避免这些构造的机会.

如果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();
    }
}
Run Code Online (Sandbox Code Playgroud)