非 blittable 结构是否被视为引用类型?
Are Non blittable structs treated as reference type?
如果我有一个非 blittable 结构,compiler/CLR 如何处理它?
例如:如果我有一个非 blittable 结构 X,我将 不带 'ref/out' 关键字传递给某个方法,实际上将传递给该方法的是什么?指向托管堆上实际分配的结构的指针,或者编译器在传递给方法时会将结构的实例复制到堆栈上?
谢谢。
Blittable
和 Non-Blittable
类型仅在编组上下文中相关。
将 structs
传递给托管方法时,应用 value types
的常规规则,这意味着会生成一个副本。
如果您想包装原来的 struct
,根据您的评论判断这是您想要的,您讨论的选项是使用 Tuple
,我从中看到的唯一缺点是可读性:Tuple.Item1/Item2
可能不清楚。
另一种选择是制作一个包装器 class,它将包含您的 struct
作为唯一的 属性:
class StructWrapper
{
YourStruct Value { get; set; }
}
如果我有一个非 blittable 结构,compiler/CLR 如何处理它?
例如:如果我有一个非 blittable 结构 X,我将 不带 'ref/out' 关键字传递给某个方法,实际上将传递给该方法的是什么?指向托管堆上实际分配的结构的指针,或者编译器在传递给方法时会将结构的实例复制到堆栈上?
谢谢。
Blittable
和 Non-Blittable
类型仅在编组上下文中相关。
将 structs
传递给托管方法时,应用 value types
的常规规则,这意味着会生成一个副本。
如果您想包装原来的 struct
,根据您的评论判断这是您想要的,您讨论的选项是使用 Tuple
,我从中看到的唯一缺点是可读性:Tuple.Item1/Item2
可能不清楚。
另一种选择是制作一个包装器 class,它将包含您的 struct
作为唯一的 属性:
class StructWrapper
{
YourStruct Value { get; set; }
}