我有我的Keyboard类:
namespace BSGameFramework
{
namespace Input
{
static public ref class Keyboard
{
public:
static KeyboardState GetState();
};
}
}
其中KeyboardState是一个ref struct。
从我的C#应用程序编译为dll后,我看到元数据中的函数如下:
namespace BSGameFramework.Input
{
public class Keyboard
{
public Keyboard();
public static void GetState(ref KeyboardState value);
}
}
键盘类已经失去了静态状态,而GetState函数现在返回void并将KeyboardState作为引用参数!
有人知道为什么吗?提前致谢:D
答案 0 :(得分:1)
原因是因为返回类型ref struct KeyboardState
。
在C ++ / CLI中,“ref”与“value”决定了类型是引用类型还是值类型,而不是“类”与“结构”。 ref class
和ref struct
与C#的class
都是一样的。 value class
和value struct
与C#的struct
都是一样的。
因此,您将C ++ / CLI方法声明为返回引用类型,但没有^
。此数据类型确实存在于C ++ / CLI中,但不存在于C#中。您看到的方法签名是一种解决方法。
这个问题有两种可能的解决方案:
KeyboardState
更改为value struct
。从你的说法来看,听起来你从一开始就认为它是一种价值类型,所以这可能是最好的解决方案。KeyboardState^
。这将使该方法在C#中显示与在C ++ / CLI中相同。但是,如果您这样做,则需要将KeyboardState
的所有用途切换为KeyboardState^
。它是引用类型,应与^
一起使用。