Boxen auf Strukturen beim Aufrufen von ToString ()

Ich habe mich oft gefragt, ob das folgende Szenario tatsächlich in c # auftritt.

Wenn ich eine Struktur habe, aber keine der von Objekten abgeleiteten Methoden wie ToString (), GetHashCode () usw. explizit überschreibe, deklariere ich eine lokale Instanz meiner Strukturklasse und rufe 'ToString ()' auf Wenn ja, würde meine Struktur eingekapselt, dh würde die CLR sie implizit in ein Objekt auf dem Heap konvertieren und dann ToString () aufrufen? Oder ist es klug genug zu wissen, dass es für diese Struktur keine Implementierung gibt, und sie zu ignorieren?

d.h.

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?
  ..... 
}

== Bearbeiten - Aktualisieren == MehrdadsLink zu MSDN, während nützlich zu sein hat mich ein wenig verwirrt. Ich werde zitieren und sehen, ob jemand dies für mich abwählen kann

Wenn einer Anweisung der Methode callvirt die Einschränkung thisType vorangestellt wurde, wird die Anweisung wie folgt ausgeführt:

Wenn thisType ein Referenztyp ist (im Gegensatz zu einem Werttyp), wird ptr dereferenziert und als 'this'-Zeiger an den Aufruf von method übergeben.

Wenn thisType ein Werttyp ist und thisType eine Methode implementiert, wird ptr unverändert als 'this'-Zeiger auf eine Aufrufmethodenanweisung für die Implementierung der Methode durch thisType übergeben.

Wenn thisType ein Werttyp ist und thisType keine Methode implementiert, wird ptr dereferenziert, umrahmt und als 'this'-Zeiger an die callvirt-Methodenanweisung übergeben.

Bedeutet das also, dass wenn ich ToString () nicht explizit auf meinem Strukturtyp implementiere, es in den letzten Fall fällt und eingekapselt wird? Oder verstehe ich das irgendwo falsch?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage