Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C++/属性不可从c使用的cli接口#_C#_C++ Cli - Fatal编程技术网

C# C++/属性不可从c使用的cli接口#

C# C++/属性不可从c使用的cli接口#,c#,c++-cli,C#,C++ Cli,Cli界面如下所示: using namespace System::Timer namespace Interfaces { public interface class ITimerProvider { property Timer AppTimer { Timer get(); } } } 进入从该接口派生的c#类,并使用VS2013中右键单击菜单中的“实现接口”,它将创建: public

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\u AppTimer()


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

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

虽然从技术上讲,属性只是方法
get_propertyName()
set_propertyName()
的语法糖,但在实现属性时,实际上并不是用C编写这些方法。实现该属性的正确C#代码如下:

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

如果您将代码更改为类似的内容,则应该可以修复错误。

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

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

你在那个片段中有很多拼写错误。但最重要的一点肯定是你没有正确申报财产。计时器是引用类型,您需要返回对该对象的引用以与其他托管语言保持兼容。使用
属性计时器^AppTimer
,注意添加的^hat。谢谢。你已经间接给出了答案。使用引用类型执行此操作时,vs2013将创建您期望的接口实现代码。它编译得很好!对的我想知道为什么vs2013会加入奇怪的get_u..()方法。这是由于接口声明中缺少引用类型造成的。它编译得很好,因此我没有首先看到错误。在使用引用类型时,自动生成的代码与您发布的代码类似。