34

私の C# アプリケーションでは、コールバック/デリゲートで C++ 構造体へのポインターを受け取ります。トリックを実行できるかどうかはわかりませんclassが、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
4

1 に答える 1

55

ref構造体を参照渡しするために使用したいだけのようです:

private static void Foo(ref s s1)
{
    s1.a++;
    Console.WriteLine("inner a = " + s1.a);
}

そして呼び出しサイトで:

Foo(ref s1);

詳細については、C# でのパラメーターの受け渡しに関する私の記事を参照してください。

相互運用性以外では、通常、このような変更可能な構造体を使用しないことを強くお勧めます。ここでの利点は理解できますが。

于 2013-05-17T17:22:18.517 に答える