it-swarm.com.de

c # struct als Referenz übergeben?

In meiner C # -Anwendung erhalte ich Zeiger auf C++ - Struktur in Callback/Delegate. Ich bin mir nicht sicher, ob class den Trick ausführen kann, aber das Umwandeln des C++ - Zeigers in die entsprechende C # -Struktur funktioniert einwandfrei. Daher verwende ich C # -Struktur zum Speichern von Daten.

Nun möchte ich einen Verweis auf struct zur weiteren Verarbeitung übergeben

  • Ich kann class nicht verwenden, da es wahrscheinlich nicht perfekt auf c ++ - Strukturen "abgebildet" wird.
  • Ich möchte keine Struktur kopieren, um die Latenz zu verbessern

Wie kann ich das machen?


Dieses Beispiel zeigt, dass struct als Wert und nicht als Referenz übergeben wird:

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);
        }

    }
}

Ausgabe ist:

inner a = 2
outer a = 1
30
javapowered

Es hört sich so an, als ob Sie nur ref verwenden möchten, um die Struktur als Referenz zu übergeben:

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

Und auf der Anrufseite:

Foo(ref s1);

Weitere Informationen finden Sie in meinem Artikel zur Parameterübergabe in C # .

Beachten Sie, dass ich, anders als für interop, normalerweise dringend empfehlen würde , keine veränderlichen Strukturen wie diese zu verwenden . Ich kann die Vorteile hier jedoch verstehen.

49
Jon Skeet