通过引用传递c#struct? 在我的C语言应用程序中,我在回调/委托中接收到C++结构的指针。我不确定类< /C>是否可以做到这一点,但是只要将C++指针投向适当的C结构,就可以了,所以我使用C结构来存储数据。
现在我想传递对struct的引用以进行进一步处理通过引用传递c#struct? 在我的C语言应用程序中,我在回调/委托中接收到C++结构的指针。我不确定类< /C>是否可以做到这一点,但是只要将C++指针投向适当的C结构,就可以了,所以我使用C结构来存储数据。,c#,C#,现在我想传递对struct的引用以进行进一步处理 我不能使用类< /> >因为它可能不会完全映射到C++结构。 我不想为了更好的延迟而复制struct 我该怎么做 此示例演示了结构是通过值传递的,而不是通过引用传递的: using System; namespace TestStruct { struct s { public int a; } class Program { static void Main(st
- 我不想为了更好的延迟而复制struct
此示例演示了结构是通过值传递的,而不是通过引用传递的:
using System;
namespace TestStruct
{
struct s
{
public int a;
}
class Program
{
static void Main(string[] args)
{
s s1 = new s
{
a = 1
};
Foo(s1);
Console.WriteLine("outer a = " + s1.a);
}
private static void Foo(s s1)
{
s1.a++;
Console.WriteLine("inner a = " + s1.a);
}
}
}
private static void Foo(ref s s1)
{
s1.a++;
Console.WriteLine("inner a = " + s1.a);
}
输出为:
inner a = 2
outer a = 1
听起来您只是想使用
ref
通过引用传递结构:
using System;
namespace TestStruct
{
struct s
{
public int a;
}
class Program
{
static void Main(string[] args)
{
s s1 = new s
{
a = 1
};
Foo(s1);
Console.WriteLine("outer a = " + s1.a);
}
private static void Foo(s s1)
{
s1.a++;
Console.WriteLine("inner a = " + s1.a);
}
}
}
private static void Foo(ref s s1)
{
s1.a++;
Console.WriteLine("inner a = " + s1.a);
}
在呼叫站点:
Foo(ref s1);
有关更多详细信息,请参阅我的
请注意,除了互操作,我通常强烈建议不要使用这样的可变结构。不过,我可以理解这里的好处。+1。旁注:必须非常小心地编写代码处理
struct
,因为几乎所有使用struct
的操作都会创建副本(数组除外,在数组中您仍然可以获取元素的ref
),为什么强烈建议不要通过ref
传递结构?就我所知,C++中的引用是通过引用的(如:<代码> STD::String和),它可以消除对大型结构的不必要复制。@ CMBaseNT:我强烈建议不要使用可更改的结构。通过ref传递结构是可以的,但是a)我建议一般不要使用大型结构;B)我会反对可变结构(就像微软设计指南)那样,因为它们会引起很多意外。注意C++中关于结构的推理:struct
在C#中的行为。我的许多互操作类实际上是类而不是结构。如果正确设置编组(通常默认编组有效),则可以使用类。如果有疑问,我会先尝试上课。