Как работает Возврат Структуры как Интерфейса? - PullRequest
4 голосов
/ 21 октября 2009

Следующий код работает, но я не могу понять, что происходит с памятью. Где и как копируется значение структуры 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();
}

Ответы [ 3 ]

9 голосов
/ 21 октября 2009

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

4 голосов
/ 21 октября 2009

Это будет вписано в оператор return t;. В этот момент значение копируется из стека в кучу.

3 голосов
/ 21 октября 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...