最近、ラッピングのために 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 からのデリゲートを使用することはできません。
確認したいだけです。コメントと啓発に感謝します。