在我的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#中的行爲如何。 –
大量的互操作類實際上是類而不是結構。如果您正確設置編組(並且通常默認編組工作),那麼您可以使用一個類。如果有疑問,我會先與班級一起嘗試。 –