2016-06-23 25 views
0

Sagen wir, ich habe einige Struktur und eine Schnittstelle, die unter anderem aussetzt, dass struct als Eigenschaft:Führen Interfaces mit Struktureigenschaften zum Boxen?

public struct MyStruct{ 
    public readonly string Hello; 

    public MyStruct(string world){ 
     Hello = world; 
    } 
} 

public interface IMyInterface{ 
    MyStruct myStruct{ get; set; } 
} 

Und in meiner Anwendung, ein Objekt, das die Schnittstelle implementiert, erstellt und in eine Methode übergeben:

public void MyMethod(IMyInterface interface){ 
    var structContents = interface.myStruct; 
    Console.WriteLine(structContents.Hello); 
} 

Meine Frage ist: wenn ich diese Struktur Wert in die Schnittstelle Verpackung und es um meine Anwendung vorbei, wird diese Struktur verpackt werden und dann später unboxed wird, wenn ich es in MyMethod zugreifen? Oder gibt es ein anderes Boxing/Unboxing oder anderes Problem, das hinter den Kulissen mit solch einem Design auftaucht?

+1

Nein, Strukturen als Mitglieder von Schnittstellen sind nicht eingerahmt. Strukturen, die einer Variablen eines Schnittstellentyps zugewiesen sind, die sie implementieren, sind eingerahmt. – Lee

Antwort

3

Per the docs:

Boxen ist der Prozess, einen Werttyp an die Art des Umwandelns Objekt oder auf jede Art Schnittstelle dieses Werttyp realisiert.

Sie tun keines dieser Dinge mit myStruct, also gibt es hier kein Boxen.

+0

Großartig, das habe ich mir gedacht. Vielen Dank! –