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)
等等