joe*_*joe 4 .net c# struct ref-struct c#-7.3
根据文档:
您不能将 ref 结构声明为类或普通结构的成员。
但我成功地编译并运行了这个:
public ref struct RefStruct
{
public int value;
}
public class MyClass
{
public RefStruct Item => default;
}
...
MyClass c = new MyClass();
Console.WriteLine(c.Item.value);
Run Code Online (Sandbox Code Playgroud)
现在RefStruct是 aref struct并且它是一个类的成员。这种说法在某些情况下是错误的吗?
更新 现在文档已更新为更准确的描述。
它不是类的字段,而是属性 getter 的返回值 - 这很好,因为它只是函数返回值。
请注意,“作为类的成员”通常包括属性,可能应该更改为“类的字段”。
如果您尝试将其声明为类字段(直接或通过自动实现的属性间接),这将需要将类的一部分( 的数据ref struct)分配在堆栈上,并将其余部分分配在托管堆中。
问题中的代码定义了非自动实现的属性。因此,编译器不需要在类中自动创建属性类型的隐藏字段。因此,虽然属性结果类型ref struct实际上不存储在类中,因此并不违反该ref struct类型不包含在任何类中的要求。请注意,即使制作 setter 方法本身也很好 - 存储该属性的值会很棘手,但您可以安全地将ref struct(public int value;如帖子中所示)的内容存储在 中set并在 中重新创建它get。
| 归档时间: |
|
| 查看次数: |
2362 次 |
| 最近记录: |