【问题标题】:Difference between these two casts这两个演员的区别
【发布时间】:2013-02-23 18:03:53
【问题描述】:

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

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

public class Class1: Interface1
{
}

这两者有什么区别?:

Interface1 myObject = new Class1();

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

第一个也是铸造形式吗?

编辑:

每个人都做什么?

【问题讨论】:

标签: c# class object interface


【解决方案1】:

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

【讨论】:

  • 你把隐式拼错成隐式了
  • 也许您应该详细说明区别和用途?
  • 这种情况的区别只是语法上的不同,一个是隐式的,一个是显式的。我相信它们最终会编译成同一个东西。
【解决方案2】:

第一种情况这个概念叫做polymorphism

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

【讨论】:

  • 它仍然是一个隐式转换。
【解决方案3】:

第一个确实是隐式转换。引用微软:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多