【问题标题】:boxing through casting interfaces通过铸造接口进行拳击
【发布时间】: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


    【解决方案1】:

    装箱只发生在值类型上。 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> 等,它使您能够工作没有实际装箱值类型本身的接口。

    【讨论】:

      【解决方案2】:

      没有。

      装箱是将值类型转换为类型对象或 到此值类型实现的任何接口类型。

      Here 更多。

      【讨论】:

        猜你喜欢
        • 2012-12-01
        • 1970-01-01
        • 2011-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-03
        相关资源
        最近更新 更多