Frage

Der folgende Code funktioniert, aber ich kann nicht herausfinden, was auf das Gedächtnis weise los ist. Wo und wie wird die Struktur Wert t kopiert?

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();
}
War es hilfreich?

Lösung

Wenn Sie werfen die Struktur auf eine Schnittstelle, es Boxen die Struktur, wenn das ist, was Sie fordern? http://blogs.msdn.com/abhinaba/archive/2005 /10/05/477238.aspx

Andere Tipps

Es wird auf der return t; Anweisung geschachtelt werden. Zu diesem Zeitpunkt wird der Wert aus dem Stapel auf den Heap kopiert.

Wenn Sie von Make zurückkehren () und zuordnen zu „es“, sind Sie aus dem Stapel eine Kopie des „t“ struct Rückkehr innerhalb von Make ().

Dies wird dann in ein Objekt verpackt, und „es“ die Schnittstelle zugewiesen. Die Schnittstelle, enthält einen Verweis auf die „Boxed“ Kopie der Struktur, die Sie dann verwenden, um Hallo () aufrufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top