passer c # struct par référence?

Dans mon application c #, je reçois un pointeur sur la structure c ++ dans callback / delegate. Je ne sais pas si la class peut faire l’affaire, mais le simple fait de placer le pointeur c ++ sur la structure c # appropriée fonctionne correctement. C’est pourquoi j’utilise la structure c # pour stocker des données.

Maintenant, je veux passer une référence à struct pour un traitement ultérieur

  • Je ne peux pas utiliser class car il ne sera probablement pas “mappé” parfaitement à la structure c ++.
  • Je ne veux pas copier struct pour une meilleure latence

Comment puis je faire ça?


Cet exemple montre que struct est passé par valeur, pas par référence:

 using System; namespace TestStruct { struct s { public int a; } class Program { static void Main(ssortingng[] 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); } } } 

La sortie est:

 inner a = 2 outer a = 1 

On dirait que vous voulez juste utiliser ref pour passer le struct par référence:

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

Et sur le site de l’appel:

 Foo(ref s1); 

Voir mon article sur le passage de parameters en C # pour plus de détails.

Notez que, sauf pour l’interopérabilité, je recommanderais fortement de ne pas utiliser des structures mutables comme celle-ci. Je peux comprendre les avantages ici cependant.