2010-10-29 55 views
2

將類轉換爲接口與將類轉換爲C#中的另一個類相同?在此過程中是否發生盒或拆箱?C#轉換接口

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

轉換爲它的接口:

public void Test() 

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

用'I'開始接口名稱是(恕我直言)很好的做法。 – nothrow 2010-10-29 13:02:58

回答

10

假設ExternArea是一類,而不是一個值類型(結構或枚舉),沒有涉及拳擊。拳擊曾經將值類型轉換爲引用類型實例。

注意,使用as通常雖然優選的:

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

如果extArea繼承Area接口,firts行會拋出異常嗎? – ozsenegal 2010-10-29 12:55:14

+2

@user否,區域設置爲空 – 2010-10-29 12:56:55

2

拳擊只發生如果轉換一個值類型(一個結構或一個數字)到引用類型object或接口通過實現所述struct

鑄造引用類型(一類的一個實例),以不同的參考類型(基類或一個接口implemente d級)不涉及拳擊。

即便如此,you should not cast unnecessarily;相反,使用as關鍵字,像這樣:

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

+1提供鏈接 – 2010-10-29 22:53:15

0

裝箱和取消裝箱具有封裝對象內的值類型做的,因此它可以用作參考型(在堆上分配) 。當你拆箱時,你會從「箱子」中獲得這樣的價值。所以不,在這個例子中不會發生這種情況。