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();
}
Était-ce utile?

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 ().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top