虚拟属性是否慢于具体属性?

时间:2013-03-26 09:13:10

标签: c# performance oop visual-c++ interface

假设我有一个名为IMyInterface的C#接口,定义如下:

// C# code
public interface IMyInterface
{
  string MyProperty { get; }
}

假设我还有一个C ++ / CLI类MyConcreteClass,它实现了这个接口,其头部声明如下:

public ref class MyConcreteClass : public IMyInterface
{
 public:
  virtual property String^ MyProperty 
  {
    String^ get() sealed { return String::Empty; };
    void set( String^ s ) sealed { };
  }
};

显然,当您通过接口访问虚拟成员时,运行时必须在类中查找实现,并且比成员不是虚拟成员时要慢。

IMyInterface obj;
obj->MyProperty = "HELLO";

我要具体询问直接在具体对象类型上使用虚拟成员的性能。如果MyProperty是虚拟成员,这会慢吗?

MyConcreteClass obj;
obj->MyProperty = "HELLO";

1 个答案:

答案 0 :(得分:4)

虚拟方法较慢,因为运行时必须检查方法的实际实现。所以这是一个额外的检查。你每秒仍然可以有数十万个。所以不要强调它。在Java中,默认情况下每个方法都是虚拟的。

更新: 我不确定如何引入c ++改变事物。我的猜测是类似的,因为你仍在访问虚拟方法。我不确定它会如何改变它。但这又是我的猜测。希望其他人可以提供更多帮助。