2013-03-08 63 views
3

我對演員並不十分熟悉。所以隨時編輯或註釋我的問題的變化。這兩個演員陣容之間的區別

比方說,我有一個實現接口的類:

public class Class1: Interface1 
{ 
} 

請告訴我這兩個?:

Interface1 myObject = new Class1(); 

Class1 myClassObject = new Class1(); 
Interface1 myObject = (Interface1) myClassObject; 

之間的區別是第一個也是一種形式的鑄造?

編輯:

每個人做什麼?

+0

看到這個問題:http://stackoverflow.com/questions/1085144/what-is-the-difference-between-boxing-unboxing-and-type-鑄造 – rkrahl 2013-03-08 08:46:36

+3

@rkrahl:裝箱/取消裝箱是當你使一個值類型成爲一個引用類型(fe'int' - >'object'),反之亦然。 – 2013-03-08 08:49:05

回答

5

第一個確實是一個隱式演員。引用微軟:

對於引用類型,隱式轉換總是存在從一個類到它的任何直接或間接基類或接口。沒有特殊的語法是必要的,因爲派生類總是包含基類的所有成員。

第二次演員是一個明確的轉換,並且如上所述,因爲上述原因沒有必要。在轉換過程中某些信息可能/會丟失時,顯式轉換是必要的,並告訴編譯器如何處理它。

微軟大約有鑄造一個很好的文章:http://msdn.microsoft.com/en-us/library/ms173105.aspx

+1

+1爲參考文章。 – Freeman 2013-03-08 08:54:22

2

首先是一個多態特性(雖然仍然是隱式轉換),因爲Class1實現了Interface1。 第二個是明確的轉換,並不是必需的,MyClass1已經是Interface1(這是一個說明問題)。

+0

你已經拼錯了暗示 – 2013-03-08 08:45:54

+0

也許你應該詳細說明差異和用途? – JustAnotherUserYouMayKnow 2013-03-08 08:46:20

+0

這種情況下的區別只是在語法上,一種是隱含的,另一種是明確的。我相信他們最終會編入相同的東西。 – Freeman 2013-03-08 08:53:21

1

第一種情況的概念被稱爲polymorphism

在計算機科學中,多態性是一種編程語言特徵 ,其允許不同的數據類型的值,以使用 統一的接口來處理。參數多態的概念適用於數據類型和函數。可以評估或應用於不同類型值的函數被稱爲多態函數 函數。可以看起來是通用類型的數據類型(例如,具有任意類型的元素的列表)被指定爲 多態數據類型,如製造這種專用性的通用類型。

+3

它仍然是一個隱含的演員。 – JustAnotherUserYouMayKnow 2013-03-08 08:45:59