Comment fonctionne le retour d'une structure en tant qu'interface?
Question
Le code suivant fonctionne, mais je ne peux pas comprendre ce qui se passe en termes de mémoire. Où et comment la valeur de la structure t
est-elle copiée?
interface ITest { void Hello(); }
struct STest : ITest
{
public void Hello() { Console.WriteLine("Hello"); }
}
static ITest Make()
{
STest t = new STest();
return t;
}
static void Main(string[] args)
{
ITest it = Make();
it.Hello();
}
La solution
Lorsque vous convertissez la structure en interface, elle est encadrée si c'est ce que vous demandez. http://blogs.msdn.com/abhinaba/archive/2005 /10/05/477238.aspx
Autres conseils
Il sera encadré dans l'instruction return t;
. À ce stade, la valeur est copiée de la pile dans le tas.
Lorsque vous revenez de Make () et que vous assignez à "it", vous retournez une copie du "t". struct depuis la pile à l'intérieur de Make ().
Celui-ci est ensuite placé dans un objet et affecté à l'interface "it". L’interface contient une référence à la boîte " copie de la structure, que vous utiliserez ensuite pour appeler Hello ().