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