Salut
Je suis actuellement en train de développer le wrapper .Net d'une bibliothèque C (j'utilise du P/Invoke), et je suis face à un problème que je n'arrive pas à résoudre vu ma très faible expérience du C# ; je souhaiterais donc votre opinion.
J'ai par exemple une classe Sprite avec une propriété Position de type Vector2.
Voici le code C correspondant :
Et ce que j'aimerais faire en C# :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 float Sprite_GetPositionX(Sprite* Instance); float Sprite_GetPositionY(Sprite* Instance); void Sprite_SetPosition(Sprite* Instance, float X, float Y);
Seulement, ce code inciterait à écrire des choses de ce genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class Sprite { public Vector2 Position { get {return new Vector2(Sprite_GetPositionX(Instance), Sprite_GetPositionY(Instance));} set {Sprite_SetPosition(Instance, value.x, value.y);} } private IntPtr Instance; };
Ce qui n'est évidemment pas bon étant donné que s.Position ne renvoie qu'une instance temporaire, et que toute modification sur celle-ci n'aura aucun effet sur le sprite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Sprite s = new Sprite; s.Position.x = 5;
Ma question est donc : que fait-on habituellement dans ce genre de situation en C# ? Faut-il que je remplace mes propriétés par des accesseurs ? Y a t-il une astuce pour éviter le problème cité ?
Partager