这两个演员之间的区别

时间:2013-03-08 08:41:23

标签: c# class object interface

我真的不熟悉施法。因此,请随时编辑或评论我的问题的更改。

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

public class Class1: Interface1
{
}

这两者之间有什么区别?:

Interface1 myObject = new Class1();

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

第一个也是铸造形式吗?

编辑:

每个人做什么?

3 个答案:

答案 0 :(得分:5)

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

  

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

第二次演员是明确的转换,并且如上所述,由于上面提到的原因,已经提到过。当某些信息在转换过程中可能会丢失并告诉编译器如何处理时,显式转换是必要的。

Microsoft有一篇关于强制转换的文章:http://msdn.microsoft.com/en-us/library/ms173105.aspx

答案 1 :(得分:2)

第一个是多态属性(虽然仍然是隐式转换),因为Class1实现了Interface1。 第二个是显式转换,并不是必需的,因为MyClass1已经是一个Interface1(就此而言)。

答案 2 :(得分:1)

该概念的第一种情况称为polymorphism

  

在计算机科学中,多态性是一种编程语言特征   允许使用a处理不同数据类型的值   统一界面。参数多态的概念适用于   数据类型和功能。可以评估或可以评估的函数   应用于不同类型的值被称为多态   功能。一种看似普遍类型的数据类型   (例如,指定具有任意类型的元素的列表)   多态数据类型,如广义类型,从这种类型   专业化。