Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#转换接口_C# - Fatal编程技术网

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

将类强制转换为接口与将类转换为C#中的另一个类相同?在此过程中是否发生装箱或取消装箱

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)好的做法。