在我的c#应用程序中,我收到指向回调/委托中的C++结构体的指针。我不知道如果class
可以做的伎俩,但只是将C++指针转换为适当的c#结构工作正常,所以我使用c#结构来存储数据。通过c#结构参考?
现在我想通过参考结构作进一步处理
- 我不能使用
class
,因为它可能不会“地图”完美的C++结构。 - 我不想更好的延迟复制结构
我怎么能这样做?
这个例子表明,结构是按值传递,而不是参考:
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);
}
}
}
输出是:
inner a = 2
outer a = 1
要小心你关于struct的结构:C++中的'struct'与class完全一样(禁止默认的可访问性),而在C#中它们完全不同 - 值和引用类型。机会是你真的会更好用C#中的类 - 至少读和理解'struct'在C#中的行为如何。 –
大量的互操作类实际上是类而不是结构。如果您正确设置编组(并且通常默认编组工作),那么您可以使用一个类。如果有疑问,我会先与班级一起尝试。 –