C#转换接口

时间:2010-10-29 12:44:30

标签: c#

将类转换为接口与将类转换为C#中的另一个类相同?是否在此过程中发生了框或拆箱?

interface Area
{
   string TxtArea
   {
     get;
     set;
   }
}

转换为界面:

public void Test()

    {
       ExternArea extArea = new ExternArea();
       if(extArea is Area)
       {
         ((Area)extArea).TxtArea = "voila";
       }
    }

4 个答案:

答案 0 :(得分:10)

假设ExternArea是一个类而不是值类型(struct或enum),则不涉及装箱。 Boxing only ever 将值类型转换为引用类型实例。

请注意,通常首选使用as

Area area = extArea as Area;
if (area != null)
{
    area.TxtArea = "voila";
}

答案 1 :(得分:2)

仅当您将值类型(结构或数字)转换为引用类型object或由{实现的接口>时,才会发生限制{1}})

将引用类型(类的实例)转换为不同的引用类型(基类或类实现的接口)不涉及装箱。

即便如此,you should not cast unnecessarily;相反,请使用struct关键字,如下所示:

as

答案 2 :(得分:0)

装箱和拆箱与在对象内打包值类型有关,因此它可以用作引用类型(在堆上分配)。当你取消装箱时,你会从“盒子”中获得这样的价值。所以不,在这个例子中不会发生这种情况。

答案 3 :(得分:0)

只要代码示例中的ExternArea对象是引用类型,然后 - 否 - 将不执行任何装箱操作。装箱和拆箱是指将值类型转换为对象时执行的操作。

有关详细信息,请参阅Boxing and Unboxing (C# Programming Guide)