2013-03-08 29 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