以下哪些代码段的执行速度最快?
if(ClassTestBase is ClassTestChild1)
或
if(ClassTestBase.Type == EClassType.Child1)
以下是完整的方案:
public enum EInheritanceTree
{
BaseClass,
Child1,
Child2,
Child3
}
public class MyBaseClass
{
public virtual EInheritanceTree MyClassType
{
get
{
return EInheritanceTree.BaseClass;
}
}
}
public vlasse MyChildClass1 : MyBaseClass
{
public override EInheritanceTree MyClassType
{
get
{
return EInheritanceTree.Child1;
}
}
}
考虑一种必须比较类类型以查看它是什么类型的方法。哪个最好?
public bool IsChild1(MyBaseClass myClass)
{
if(myClass is MyChildClass1)
return true;
return false;
}
或
public bool IsChild1(MyBaseClass myClass)
{
if(myClass.MyClassType == EInheritanceTree.Child1)
return true;
return false;
}
答案 0 :(得分:2)
您是否考虑过使用分析器来测试哪个性能更高? Visual Studio附带一个分析器。
我会更关心是否需要一个包含有关应用程序的继承信息的枚举。
答案 1 :(得分:0)
如果您担心性能,请不要将所有这些包含在功能中。任何代码都说:
if (Obj.IsChild1() ) foo;
应该这样做:
if(myClass.MyClassType == EInheritanceTree.Child1) foo;
如果您担心性能问题,那么您可能需要重新审视隐藏功能背后的所有概念。另外,为什么不使用多态 - 这是使子类行为不同的“正确”方法。
无论如何,做一些你自己的时间。这是确定更快的唯一方法。