如果我有一个接口A并继承了B类:
interface A { }
class B : A { }
并写下:
B sth = new B();
A aaa = B;
B bbb = (B)aaa;
会发生任何拳击吗? 当然,A和B不是空的。
答案 0 :(得分:2)
拳击仅与值类型一起发生。 B
是引用类型,所以不,没有拳击。
如果B
是值类型(struct
而不是class
),那么肯定会发生拳击。
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
在处理结构和接口时避免这些装箱和拆箱操作的一种方法是定义通用接口,la IEquatable<T>
,IComparable<T>
等,这使您能够工作< / em>使用接口而不实际装箱值类型本身。
答案 1 :(得分:1)