通过引用传递c#struct? 在我的C语言应用程序中,我在回调/委托中接收到C++结构的指针。我不确定类< /C>是否可以做到这一点,但是只要将C++指针投向适当的C结构,就可以了,所以我使用C结构来存储数据。

通过引用传递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的引用以进行进一步处理

    我不能使用<代码>类< /> >因为它可能不会完全映射到C++结构。
  • 我不想为了更好的延迟而复制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++中关于结构的推理: Stult在C++中与类完全相同(不包括默认可访问性),而在C语言中它们完全不同——值和引用类型。很可能你真的会更好地使用C#中的类-至少阅读并理解
struct
在C#中的行为。我的许多互操作类实际上是类而不是结构。如果正确设置编组(通常默认编组有效),则可以使用类。如果有疑问,我会先尝试上课。