【发布时间】:2017-07-13 14:17:49
【问题描述】:
如果我有一个接口 A 和继承的类 B:
interface A { }
class B : A { }
并写下:
B sth = new B();
A aaa = B;
B bbb = (B)aaa;
会有拳击吗? 当然,A 和 B 都不是空的。
【问题讨论】:
标签: c# interface casting boxing
如果我有一个接口 A 和继承的类 B:
interface A { }
class B : A { }
并写下:
B sth = new B();
A aaa = B;
B bbb = (B)aaa;
会有拳击吗? 当然,A 和 B 都不是空的。
【问题讨论】:
标签: c# interface casting boxing
装箱只发生在值类型上。 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
在处理结构和接口时避免这些装箱和拆箱操作的一种方法是定义一个通用接口,例如IEquatable<T>、IComparable<T> 等,它使您能够工作没有实际装箱值类型本身的接口。
【讨论】:
【讨论】: