通常,当您必须测试对象的类型时,它可能表明您的设计存在问题.面向对象编程为我们提供了通过多态避免这些构造的机会.
如果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)
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |