Следующий код работает, но я не могу понять, что происходит с памятью. Куда и как копируется структурное значение t?

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();
}
4
Henk Holterman 21 Окт 2009 в 21:52

3 ответа

Лучший ответ

Когда вы приводите структуру к интерфейсу, она упаковывает структуру, если это то, о чем вы спрашиваете? http://blogs.msdn.com/abhinaba/archive/2005 /10/05/477238.aspx

9
kemiller2002 21 Окт 2009 в 22:00

Он будет помещен в рамку для оператора return t;. На этом этапе значение копируется из стека в кучу.

4
Dave Cluderay 21 Окт 2009 в 22:02
2
Или скопировал из кучи в кучу, если структура была в поле типа, выделенного кучей.
 – 
Joren
21 Окт 2009 в 22:12

Когда вы возвращаетесь из Make () и присваиваете «it», вы возвращаете копию структуры «t» из стека внутри Make ().

Затем он помещается в объект и назначается интерфейсу «it». Интерфейс содержит ссылку на "упакованную" копию структуры, которую вы затем используете для вызова Hello ().

3
Reed Copsey 21 Окт 2009 в 22:05