高效的运行时类型检查

Bob*_*sky 9 .net c# runtime .net-2.0

我有类的层次结构,如下所示(实际上我有3个以上的派生类型):

class A {};
class B : A  {};
class C : B  {};
class D : A  {};
Run Code Online (Sandbox Code Playgroud)

这些类的实例存储在List<A>集合中.有时候集合很大(成千上万甚至上万个对象).

在我的代码中,我经常需要根据对象的确切类型执行一些操作.像这样的东西:

List<A> collection = ...
foreach (A obj in collection)
{
    if (obj is C)
        something(obj as C);
    else if (obj is B)
        somethingElse(obj as B);
    ....
}
Run Code Online (Sandbox Code Playgroud)

如您所见,代码会对对象类型和强制类型执行许多检查.对于具有许多元素的集合,代码的性能并不是那么好.

在我的情况下,您建议加快运行时类型检查的速度是多少?

Mar*_*ell 11

听起来像你应该将"某些东西"移动到一个虚拟方法中A,然后每个B,C并且D可以根据需要覆盖它(这可能仅仅意味着调用外部方法 - 它们不需要自己完成工作) - 或根据需要覆盖.

然后这变成:

foreach (A obj in collection)
{
    obj.DoSomething();
}
Run Code Online (Sandbox Code Playgroud)

class A {
    public virtual void DoSomething() {...}
}
class B : A   {
    public override void DoSomething() {...}
}
Run Code Online (Sandbox Code Playgroud)

等等