Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does Returning a Struct as an Interface work?

The following code works, but I can't figure out what's going on memory-wise. Where and how is the struct value t copied?

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();
}
like image 967
Henk Holterman Avatar asked Dec 06 '22 04:12

Henk Holterman


2 Answers

When you cast the struct to an interface, it boxes the struct if that is what you are asking? http://blogs.msdn.com/abhinaba/archive/2005/10/05/477238.aspx

like image 72
kemiller2002 Avatar answered Jan 13 '23 03:01

kemiller2002


It will be boxed on the return t; statement. At this point, the value is copied from the stack to the heap.

like image 21
Dave Cluderay Avatar answered Jan 13 '23 01:01

Dave Cluderay