2017-07-13 8 views
-1

Wenn ich eine Schnittstelle A und vererbten Klasse B haben:Boxen durch Gießen Schnittstellen

interface A { } 
class B : A { } 

und schreiben Sie:

B sth = new B(); 
A aaa = B; 
B bbb = (B)aaa; 

wird es kommen alle Boxen? Natürlich sind A und B nicht leer.

Antwort

2

Boxing tritt nur mit Werttypen auf. B ist ein Referenztyp, also nein, es gibt kein Boxen. Wenn B ein Werttyp war (struct anstelle von class), dann würde ja Boxen eintreten

interface IA { } 
struct B : IA { } 

B b = new B(); 
IA a = b; //boxing, converting a value type into a reference type 
b = (B)a; //unboxing, converting a boxed value type back to the value type itself 

Eine Möglichkeit, diese Boxen und Unboxing-Operationen zu vermeiden, wenn mit structs und Schnittstellen zu tun ist, die eine generische Schnittstelle, a la IEquatable<T>, IComparable<T> usw., die ohne Sie Arbeit mit der Schnittstelle ermöglicht tatsächlich Boxen der Werttyp selbst

1

No.

Boxen ist der Prozess, einen Werttyp zu dem Typ Objekt oder einen Schnittstellentyp durch diesen Wert Typen implementiert umzuwandeln.

Here ist mehr.