将类转换为接口与将类转换为C#中的另一个类相同?是否在此过程中发生了框或拆箱?
interface Area
{
string TxtArea
{
get;
set;
}
}
转换为界面:
public void Test()
{
ExternArea extArea = new ExternArea();
if(extArea is Area)
{
((Area)extArea).TxtArea = "voila";
}
}
答案 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)。