假设我有一个名为 IMyInterface
的 C# 接口(interface),定义如下:
// C# code
public interface IMyInterface
{
string MyProperty { get; }
}
假设我还有一个 C++/CLI 类 MyConcreteClass
,它实现了这个接口(interface)并且其 header 声明如下:
public ref class MyConcreteClass : public IMyInterface
{
public:
virtual property String^ MyProperty
{
String^ get() sealed { return String::Empty; };
void set( String^ s ) sealed { };
}
};
显然,当您通过接口(interface)访问虚拟成员时,运行时必须在类中寻找实现,并且会比成员不是虚拟成员时慢。
IMyInterface obj;
obj->MyProperty = "HELLO";
我特别询问直接在具体对象类型上使用虚拟成员的性能。如果 MyProperty
是一个虚拟成员,这会更慢吗?
MyConcreteClass obj;
obj->MyProperty = "HELLO";
最佳答案
虚方法较慢,因为运行时必须检查该方法的实际实现。所以这是一张额外的支票。您仍然可以每秒进行数十万次。所以不要强调它。在 Java 中,默认情况下每个方法都是虚拟的。
更新: 我不确定引入 C++ 会如何改变事情。我的猜测是这会很相似,因为您仍在访问虚拟方法。我不确定它会如何改变它。但这再次只是我的猜测。希望其他人可以提供更多帮助。
关于c# - 虚拟属性是否比具体属性慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15633168/