C# 不可blittable结构是否被视为引用类型?

C# 不可blittable结构是否被视为引用类型?,c#,marshalling,low-level,C#,Marshalling,Low Level,如果我有一个不可blittable结构,编译器/CLR如何处理它 例如:如果我有一个不可blittable的struct X,我将它传递给某个方法,而不传递“ref/out”关键字,那么实际传递给这个方法的是什么?指向托管堆上实际分配的结构的指针,或者编译器将在传递给方法时将结构实例的副本复制到堆栈上 谢谢。Blittable和Non-Blittable类型仅在封送上下文中相关。 将结构传递给托管方法时,将应用值类型的常规规则,这意味着复制 如果您想包装原始的结构,根据您的评论判断,这是您想要的

如果我有一个不可blittable结构,编译器/CLR如何处理它

例如:如果我有一个不可blittable的struct X,我将它传递给某个方法,而不传递“ref/out”关键字,那么实际传递给这个方法的是什么?指向托管堆上实际分配的结构的指针,或者编译器将在传递给方法时将结构实例的副本复制到堆栈上


谢谢。

Blittable
Non-Blittable
类型仅在封送上下文中相关。 将
结构
传递给托管方法时,将应用
值类型的常规规则
,这意味着复制

如果您想包装原始的
结构
,根据您的评论判断,这是您想要的,您讨论的选项是使用
元组
,我从中看到的唯一缺点是可读性:
元组。Item1/Item2
可能不清楚

另一个选项是创建一个包装类,该类将包含您的
struct
作为其唯一属性:

class StructWrapper
{
     YourStruct Value { get; set; }
}

Blittable
Non-Blittable
类型仅在封送上下文中相关。 将
结构
传递给托管方法时,将应用
值类型的常规规则
,这意味着复制

如果您想包装原始的
结构
,根据您的评论判断,这是您想要的,您讨论的选项是使用
元组
,我从中看到的唯一缺点是可读性:
元组。Item1/Item2
可能不清楚

另一个选项是创建一个包装类,该类将包含您的
struct
作为其唯一属性:

class StructWrapper
{
     YourStruct Value { get; set; }
}

它是复制品。如果需要复制回对结构所做的任何修改,则必须使用[Out].Hi@HansPassant。问题是我使用的是异步方法,它们似乎不接受作为参数:指针、ref和out。我正在阅读关于这个“限制”的文章,我发现一个解决方法是使用类元组来保存要传递给异步方法的引用。你知道这种解决方法有什么缺点吗?谢谢。它必须是一个结构吗?你能首先使用一个类吗?Hello@argaz。是的,它必须是struct,我大量使用了Marshal,为此我不能使用类。你知道使用元组有什么缺点吗?谢谢它是复制品。如果需要复制回对结构所做的任何修改,则必须使用[Out].Hi@HansPassant。问题是我使用的是异步方法,它们似乎不接受作为参数:指针、ref和out。我正在阅读关于这个“限制”的文章,我发现一个解决方法是使用类元组来保存要传递给异步方法的引用。你知道这种解决方法有什么缺点吗?谢谢。它必须是一个结构吗?你能首先使用一个类吗?Hello@argaz。是的,它必须是struct,我大量使用了Marshal,为此我不能使用类。你知道使用元组有什么缺点吗?谢谢谢谢如果使用Tuple的唯一缺点是可读性,那么它对我来说是非常棒的,我可以处理这个问题。我担心在性能、可扩展性等方面会有一些更危险的缺点。谢谢!如果使用Tuple的唯一缺点是可读性,那么它对我来说是非常棒的,我可以处理这个问题。我担心一些更危险的缺点,比如性能、可扩展性等。