【发布时间】:2013-05-12 22:56:38
【问题描述】:
在我的 c# 应用程序中,我在回调/委托中接收到指向 c++ 结构的指针。我不确定class 是否可以解决问题,但只是将 c++ 指针转换为适当的 c# 结构可以正常工作,所以我使用 c# 结构来存储数据。
现在我想传递对 struct 的引用以进行进一步处理
- 我不能使用
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
【问题讨论】:
-
注意你对结构的推理:C++ 中的
struct与类完全相同(除了默认可访问性),而在 C# 中它们完全不同 - 值和引用类型。您可能真的会更好地使用 C# 中的类 - 至少阅读并理解struct在 C# 中的行为方式。 -
我的大量互操作类确实是类而不是结构。如果您正确设置了编组(并且通常默认编组有效),那么您可以使用一个类。如果有疑问,我会先尝试上课。
标签: c#