remarks generate example c# .net casting as-operator

generate - params comments c#



¿Como operador en estructuras? (3)

No lo entiendo El operador As :

Entonces, ¿por qué funciona lo siguiente?

struct Baby : ILive { public int Foo { get; set; } public int Ggg() { return Foo; } } interface ILive { int Ggg(); } void Main() { ILive i = new Baby(){Foo = 1} as ILive; // ?????? Console.Write(i.Ggg()); // Output: 1 }

  • Baby es una estructura, crearla pondrá valor en la stack . No hay referencia aquí.

  • Ciertamente no hay tipos anulables aquí.

¿Alguna explicación de por qué me equivoco?


Al convertirlo en una interfaz, se creará una copia en caja en el montón administrado y se devolverá una referencia a la copia en caja. La caja implementa la interfaz.


Funciona porque el lado derecho es una interfaz. La condición es que el lado derecho puede aceptar null como valor, es decir, es un tipo de referencia o un tipo de valor anulable. Las interfaces son tipos de referencia. En este caso, el código encajará la estructura y luego enviará el objeto encajonado a la interfaz.


Simplemente emite con el tipo de referencia valor ILive , por lo que no se produce ningún error. Sin embargo, si prueba este código comentado, obtendrá un error.

Baby b = new Baby (); object o = b; //Baby bb = o as Baby ;

Esto se debe a que está intentando realizar conversiones con as al tipo de valor y eso no puede ser nulo.