he preguntado a menudo si el siguiente escenario que realmente sucede en C#de boxeo en estructuras al llamar ToString()
Si tengo una estructura pero no anula explícitamente cualquiera de los métodos que se derivan de objeto, como ToString(), GetHashCode(), etc. entonces si declaro una instancia local de mi clase struct y llamo 'ToString()' a ella, mi estructura sería encasillada, es decir, la CLR la convertiría implícitamente en un objeto en el montón y luego llamar a ToString()? ¿O es lo suficientemente inteligente como para saber que no hay implementación para esa estructura e ignorarla?
es decir
public struct Vector2D
{
public float m_x;
public float m_y;
...... etc
}
void SomeFunc()
{
Vector2D aVec = new Vector2D();
Console.WriteLine(aVec.ToString()); // <-- does aVec get boxed here?
.....
}
== Editar - Actualización == de Mehrdad link to MSDN, siendo a la vez útil me ha confundido ligeramente. Voy a citar a ver si alguien puede deshacer esto por mí
Cuando una instrucción método callvirt se ha restringido el prefijo thisType, la instrucción se ejecuta de la siguiente manera:
Si se thisType un tipo de referencia (como opuesto a un tipo de valor), entonces ptr es desreferenciado y pasado como el puntero 'this' al callvirt del método.
Si thisType es un tipo de valor y thisType implementa el método a continuación, ptr es pasado sin modificar como el 'esto' puntero a una instrucción de llamada de método, para la aplicación del método por el thisType.
Si thisType es un tipo de valor y thisType no implementa el método entonces PTR se eliminan las referencias, en caja, y pasa como este puntero a la instrucción método callvirt.
¿Eso quiere decir que si no se implementa de forma explícita ToString() en mi tipo de estructura que va a caer en el último caso y obtener en caja? ¿O lo estoy entendiendo mal en alguna parte?
posible duplicado de [¿Llamar a un método en un tipo de valor resulta en el boxeo en .NET?] (Http://stackoverflow.com/questions/436363/does-calling-a-method-on-a-value- type-result-in-boxing-in-net) – nawfal