cli接口,值类型为return和C#接口实现

时间:2013-09-19 12:19:19

标签: c# interface c++-cli value-type

我有 1.具有声明的接口( InterfaceCLI )和已实现的值类型( PointD )的CLI库 2.带有类( PointD )的C#库,它实现了来自1的接口

问题是C#上的接口实现很奇怪。它需要这样的代码         public ValueType GetPoint() 无论如何         public PointD GetPoint()

示例代码CLI:

public value struct PointD
//public ref class PointD
{
public:
    PointD(double x, double y);
    // Some stuff
};

public interface class InterfaceCLI
{
public:
    double Foo();
    PointD^ GetPoint();
};

示例代码C#:

public class Class1 : InterfaceCLI
{
    public double Foo()
    {
        PointD x=new PointD( 1.0 , 2.7 );
        return x.Y;
    }

    public ValueType GetPoint()
    {
        throw new NotImplementedException();
    }

    /*
    public PointD GetPoint()
    {
        throw new NotImplementedException();
    }
     */
}

为什么在类Class1中需要ValueType而不是PointD?!

1 个答案:

答案 0 :(得分:0)

PointD^ GetPoint();

值类型不是引用类型。所以你应该在这里使用^ hat。不幸的是,这种语法在C ++ / CLI中是允许的,它变成了一个盒装值。非常浪费。除了用你发现的ValueType模拟它之外,在C#中没有直接的等价物。

移除帽子以解决您的问题。