¿Cómo funciona Returning Struct as a Interface?
Pregunta
El siguiente código funciona, pero no puedo entender lo que ocurre en la memoria. ¿Dónde y cómo se copia el valor de estructura 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();
}
Solución
Cuando lanzas la estructura a una interfaz, encuadra la estructura si eso es lo que estás preguntando. http://blogs.msdn.com/abhinaba/archive/2005 /10/05/477238.aspx
Otros consejos
Se encajonará en la declaración return t;
. En este punto, el valor se copia de la pila al montón.
Cuando regreses de Make (), y asigna a " it ", estás devolviendo una copia de " t " estructura de la pila dentro de Make ().
Esto se encuadra en un objeto y se asigna a la interfaz " it " ;. La interfaz contiene una referencia a la casilla " en caja " Copia de la estructura, que luego utilizas para llamar a Hello ().