我真的不熟悉施法。因此,请随时编辑或评论我的问题的更改。
假设我有一个实现接口的类:
public class Class1: Interface1
{
}
这两者之间有什么区别?:
Interface1 myObject = new Class1();
和
Class1 myClassObject = new Class1();
Interface1 myObject = (Interface1) myClassObject;
第一个也是铸造形式吗?
编辑:
每个人做什么?
答案 0 :(得分:5)
第一个确实是隐式演员。引用微软:
对于引用类型,从类到其任何一个直接或间接基类或接口始终存在隐式转换。不需要特殊语法,因为派生类总是包含基类的所有成员。
第二次演员是明确的转换,并且如上所述,由于上面提到的原因,已经提到过。当某些信息在转换过程中可能会丢失并告诉编译器如何处理时,显式转换是必要的。
Microsoft有一篇关于强制转换的文章:http://msdn.microsoft.com/en-us/library/ms173105.aspx
答案 1 :(得分:2)
第一个是多态属性(虽然仍然是隐式转换),因为Class1实现了Interface1。 第二个是显式转换,并不是必需的,因为MyClass1已经是一个Interface1(就此而言)。
答案 2 :(得分:1)
该概念的第一种情况称为polymorphism
在计算机科学中,多态性是一种编程语言特征 允许使用a处理不同数据类型的值 统一界面。参数多态的概念适用于 数据类型和功能。可以评估或可以评估的函数 应用于不同类型的值被称为多态 功能。一种看似普遍类型的数据类型 (例如,指定具有任意类型的元素的列表) 多态数据类型,如广义类型,从这种类型 专业化。