Как работает Возврат Структуры как Интерфейса?

StackOverflow https://stackoverflow.com/questions/1602448

  •  05-07-2019
  •  | 
  •  

Вопрос

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

Решение

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top