我最近开始使用 C++/Cli 进行包装。现在我正处于一个我必须更多地了解内部结构的地步。
考虑以下代码:
Header file (ignoring .NET namespaces for this example):
public ref class BaseyClass
{
protected:
delegate void TestMethodDelegate(); // TestMethod delegate
BaseyClass(); // constructor
virtual void TestMethod(); // member: method
GCHandle _testMethodHandle; // member: method handle
};
CPP file (ignoring .NET namespaces for this example):
BaseyClass::BaseyClass()
{
_testMethodHandle
= GCHandle::Alloc(
gcnew TestMethodDelegate(this, &BaseyClass::TestMethod));
}
void TestMethod()
{
}
最终,这个类将在以后用作基类(对于 DerivedClass),并且方法“TestMethod()”被覆盖并通过委托指针从非托管代码中调用。
现在的问题是:委托将引用哪个方法?
BaseyClass::TestMethod();
或者
DerivedClass::TestMethod();
我个人认为委托将引用“BaseyClass::TestMethod()”,因为即使它被覆盖,委托也指向 BaseyClass 的(基)地址。因此,DerivedClass 不能覆盖“TestMethod”并使用来自 BaseyClass 的委托。
我只是想确定一下。感谢您的评论和启发。