在C ++ / CLI中:
[StructLayout(LayoutKind:Sequential, CharSet=CharSet::Ansi)]
public ref struct NestedStruct
{
public:
int x;
};
[StructLayout(LayoutKind:Sequential, CharSet=CharSet::Ansi)]
public ref struct AStruct
{
public:
NestedStruct nestedStruct;
};
在C#中:
AStruct s = new AStruct();
s.nestedStruct.x = 7; // ERROR cs0570
C ++ / CLI中是否禁止嵌套结构?结构是否应该在单独的C#程序集中定义?
答案 0 :(得分:0)
NestedStruct nestedStruct;
这是一个问题,NestedStruct
不是值类型。 ref struct
遵循原生C ++用法,其中结构和类之间没有真正的区别,除了结构默认情况下它的所有成员 public 。 ref
关键字是真正重要的关键字,您声明了引用类型而不是值类型。应使用hat声明引用类型的变量,以使其可供其他.NET语言使用。修正:
NestedStruct^ nestedStruct;
如果你实际上想要声明一个值类型(比如C#中的struct)那么你必须写:
public value class NestedStruct
{
public:
int x;
};
或者,由于您将该成员公开,因此您可以使用value struct
并删除public:
,因为这是结构的默认辅助功能。
Fwiw,这个“功能”旨在让本机C ++程序员熟悉C ++ / CLI语法。它没有。