c++ /cli接口的属性在c#中不可用

本文关键字:属性 cli 接口 c++ | 更新日期: 2023-09-27 18:17:00

Cli界面如下:

using namespace System::Timer
namespace Interfaces
{
    public interface class ITimerProvider
    {
        property Timer AppTimer
        {
             Timer get();
        }
    }
}

从该接口派生c#类,并在VS2013中使用右键菜单中的"实现接口",它创建:

public void get_AppTimer(ref Timer value)
{
   throw new NotImplementedException();
}

编译器报错"MyProject没有实现接口成员MyCLIProject.Interfaces.ITimerprovider.get_AppTimer() "

它会这样做,即使它自己把它放在里面。

c++ /cli接口的属性在c#中不可用

汉斯已经给出了答案。纠正接口声明会导致预期的自动生成代码,并且项目编译良好:

property Timer^ AppTimer
    {
         Timer^ get();
    }

我认为这可能是由于Visual Studio没有为您正确生成代码。

虽然从技术上讲,属性只是get_propertyName()set_PropertyName()方法的语法糖,但在实现属性时,您实际上不会在c#中编写这些方法。实现该属性的正确c#代码应该是这样的:

class MyProject
{
    public Timer AppTimer
    {
        get
        {
            // return the value here
        }
    }
}

如果你把你的代码改成这样,应该可以修复这个错误。