C#转换接口
将类强制转换为接口与将类转换为C#中的另一个类相同?在此过程中是否发生装箱或取消装箱C#转换接口,c#,C#,将类强制转换为接口与将类转换为C#中的另一个类相同?在此过程中是否发生装箱或取消装箱 interface Area { string TxtArea { get; set; } } 转换为it接口: public void Test() { ExternArea extArea = new ExternArea(); if(extArea is Area) { ((Area)extAre
interface Area
{
string TxtArea
{
get;
set;
}
}
转换为it接口:
public void Test()
{
ExternArea extArea = new ExternArea();
if(extArea is Area)
{
((Area)extArea).TxtArea = "voila";
}
}
只有将值类型(结构或数字)转换为引用类型(
对象
或由结构
实现的接口)时,才会发生装箱
将引用类型(类的实例)强制转换为不同的引用类型(基类或类实现的接口)不涉及装箱
即便如此;相反,使用作为
关键字,如下所示:
Area area = extArea as Area;
if (area != null)
{
area.TxtArea = "voila";
}
假设
ExternArea
是一个类而不是一个值类型(struct或enum),则不涉及装箱。装箱只能将值类型转换为引用类型实例
请注意,通常首选使用作为
:
Area area = extArea as Area;
if (area != null)
{
area.TxtArea = "voila";
}
装箱和取消装箱与将值类型打包到对象中有关,因此可以将其用作引用类型(在堆上分配)。当你拆箱时,你会从“盒子”中得到这样一个值。因此,在本例中不会出现这种情况。只要代码示例中的
ExternArea
对象是引用类型,那么-no-不会执行装箱操作。装箱和取消装箱是指将值类型转换为对象时执行的操作
有关详细信息,请参阅。如果extArea doenst继承了区域接口,firts行是否会引发异常?@user No,Area设置为Null以“I”开头的接口名称是(IMHO)好的做法。