我想知道为什么我的下面的例子编译,但在运行时失败?实现接口的类有点不同。 DoSomething实现采用const int,而在接口中它只是一个int。编译器应该提供错误,或者运行时应该允许这样做,因为我相信const信息可以在运行时被忽略。
#include "stdafx.h"
using namespace System;
public interface class IFancyStuff
{
void DoSomething(int x);
};
public ref class FancyClass : public IFancyStuff
{
public:
virtual void DoSomething(const int x)
{
Console::WriteLine("hello world");
}
};
int _tmain(int argc, _TCHAR* argv[])
{
IFancyStuff ^fc = gcnew FancyClass();
fc->DoSomething(42);
return 0;
}
此代码编译,但在运行时失败。运行时出错:
Unhandled Exception: System.TypeLoadException: Method 'DoSomething' in type 'FancyClass' from assembly 'CppCli, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' does not have an implementation.
at wmain(Int32 argc, Char** argv)
at _wmainCRTStartup()
/勒
答案 0 :(得分:0)
你的继承方式错误。
您还需要实际实现专门的方法来调用基本方法。
应该是
#include "stdafx.h"
using namespace System;
public ref class FancyClass
{
public:
virtual void DoSomething(const int x)
{
Console::WriteLine("hello world");
}
};
public interface class IFancyStuff : public FancyClass
{
void DoSomething(int x) {
FancyClass::DoSomething( x );
}
};
int _tmain(int argc, _TCHAR* argv[])
{
IFancyStuff ^fc = gcnew FancyClass();
fc->DoSomething(42);
return 0;
}