假设我有一个名为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";
答案 0 :(得分:4)
虚拟方法较慢,因为运行时必须检查方法的实际实现。所以这是一个额外的检查。你每秒仍然可以有数十万个。所以不要强调它。在Java中,默认情况下每个方法都是虚拟的。
更新: 我不确定如何引入c ++改变事物。我的猜测是类似的,因为你仍在访问虚拟方法。我不确定它会如何改变它。但这又是我的猜测。希望其他人可以提供更多帮助。