boxing na strukturach podczas wywoływania ToString ()

Często zastanawiałem się, czy następujący scenariusz rzeczywiście ma miejsce w c #

Jeśli mam struct, ale nie przesłonię jawnie żadnej z metod wywodzących się z obiektu, takich jak ToString (), GetHashCode (), itp., To jeśli zadeklaruję lokalną instancję mojej struct class i wywołam 'ToString ()' on to, czy mój struct uzyskać boxed tj. czy CLR konwertuje go niejawnie do obiektu na stercie, a następnie wywołać ToString ()? Czy też jest wystarczająco sprytny, aby wiedzieć, że nie ma implementacji dla tej struktury i zignorować ją?

to znaczy

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

== Edytuj - Aktualizuj == Mehrdad'slink do MSDN, będąc użytecznym, pomieszało mnie z lekka. Zacytuję i zobaczę, czy ktoś może to dla mnie usunąć

Gdy instrukcja metody callvirt została poprzedzona ograniczeniem tego typu, instrukcja jest wykonywana w następujący sposób:

Jeśli thisType jest typem odniesienia (w przeciwieństwie do typu wartości), to ptr jest odwoływany i przekazywany jako wskaźnik „this” do metody callvirt metody.

Jeśli thisType jest typem wartości, a metoda thisType implementuje metodę, to ptr jest przekazywane niezmodyfikowane jako wskaźnik „this” do instrukcji metody wywołania dla implementacji metody przez tenType.

Jeśli thisType jest typem wartości, a thisType nie implementuje metody, to ptr jest odwoływany, umieszczany w ramce i przekazywany jako wskaźnik „this” do instrukcji metody callvirt.

Czy to oznacza, że ​​jeśli nie zastosuję jawnie ToString () na moim typie struktury, to wpadnie on do ostatniego przypadku i zostanie zapakowany? A może gdzieś źle to rozumiem?

questionAnswers(3)

yourAnswerToTheQuestion