拳击通过铸造界面

时间:2017-07-13 14:17:50

标签: c# interface casting boxing

如果我有一个接口A并继承了B类:

interface A { }
class B : A { }

并写下:

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

会发生任何拳击吗? 当然,A和B不是空的。

2 个答案:

答案 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)

没有。

  

拳击是将值类型转换为类型对象或的过程   到此值类型实现的任何接口类型。

Here更多。