3

我对选角真的不是很熟悉。因此,请随时对我的问题进行编辑或评论更改。

假设我有一个实现接口的类:

public class Class1: Interface1
{
}

这两者有什么区别?:

Interface1 myObject = new Class1();

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

第一个也是一种铸造形式吗?

编辑:

每个人是做什么的?

4

3 回答 3

5

第一个确实是隐式演员表。引用微软:

对于引用类型,始终存在从类到其任何一个直接或间接基类或接口的隐式转换。不需要特殊语法,因为派生类总是包含基类的所有成员。

第二个转换是显式转换,如上所述,由于上述原因,不需要。当某些信息在转换过程中可能/将会丢失并告诉编译器如何处理时,显式转换是必要的。

微软有一篇关于铸造的好文章:http: //msdn.microsoft.com/en-us/library/ms173105.aspx

于 2013-03-08T08:53:06.937 回答
2

第一个是多态特性(尽管仍然是隐式转换),因为 Class1 实现了 Interface1 。第二个是显式转换,并且不是必需的,因为 MyClass1 已经是一个 Interface1(说出来的问题)。

于 2013-03-08T08:44:54.757 回答
1

第一种情况这个概念叫做多态

在计算机科学中,多态性是一种编程语言特性,允许使用统一接口处理不同数据类型的值。参数多态性的概念适用于数据类型和函数。可以计算或应用于不同类型值的函数称为多态函数。可以看起来是通用类型的数据类型(例如,具有任意类型元素的列表)被指定为多态数据类型,就像进行这种专门化的通用类型一样。

于 2013-03-08T08:45:01.477 回答