How does Returning a Struct as an Interface work?
Question
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();
}
Solution
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
OTHER TIPS
It will be boxed on the return t;
statement. At this point, the value is copied from the stack to the heap.
When you return from Make(), and assign to "it", you're returning a copy of the "t" struct from the stack inside of Make().
This is then boxed into an object, and assigned to the interface "it". The interface, holds a reference to the "boxed" copy of the struct, which you then use to call Hello().
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow