为什么向上转换可以直接在c#中完成,但是为了向下转换,我们需要强制转换?

高拉夫123

考虑两个简单的类

public class Parent
{
    public void ShowData()
    {

    }
}

public class Child : Parent
{
    public void GetData()
    {

    }
}

// Upcasting -- NO ERROR
Parent objParent = new Child();

// Downcasting  -- ERROR
Child objChild = new Parent();

// Downcasting -- NO ERROR
Child objNewChild = (Child)new Parent();
  1. 为什么UpCasting不需要explicit casting
  2. 为什么DownCasting要求explicit casting
乔恩·斯基特

为什么UpCasting不需要显式强制转换?

因为它总是安全的。永远不会抛出异常。

为什么DownCasting需要显式强制转换?

因为它是不是安全。它可能引发异常或丢失信息(例如longint在未经检查的上下文中强制从转换为)。

编译器很乐意让您隐式地安全的事情,但是如果您要做“危险”的事情,则需要有效地在方框中打上“我知道我在这里正在做的事情”的字样。

根据C#规范的6.1节:

预定义的隐式转换始终成功,并且永远不会引发异常。正确设计的用户定义的隐式转换也应具有这些特征。

以及第6.2节:

不是隐式转换1的显式转换是无法证明总是成功的转换,是已知可能会丢失信息的转换,以及跨足以区分为显式表示法的类型的域之间的转换。


1所有隐式转换也是显式转换。这只是使该规范的部分变得更简单的技术要点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我们要强制转换malloc的返回值?

来自分类Dev

为什么我们使用强制转换通过C中的malloc分配堆内存?

来自分类Dev

双重推导-为什么需要强制转换

来自分类Dev

为什么此代码需要强制转换?

来自分类Dev

为什么我们需要对 Parse 方法返回的对象进行强制转换?

来自分类Dev

为什么我需要强制转换才能从基类访问实际值?

来自分类Dev

为什么在此Java示例中需要强制转换HttpURLConnection?

来自分类Dev

在C#中需要强制转换基值类型时

来自分类Java

为什么将变量声明为int类型需要强制转换流?长型不需要强制转换

来自分类Dev

为什么一个接口实现需要强制转换而另一种则不需要强制转换?

来自分类Java

为什么我们不能将List <A>强制转换为List <B>

来自分类Java

为什么我们总是在Android / Java中键入强制类型转换?

来自分类Dev

为什么使用 compose 方法需要强制转换,而不使用 andThen 方法

来自分类Dev

为什么在这种情况下需要强制转换?

来自分类Dev

为什么需要强制转换 Java 泛型方法参数类

来自分类Java

为什么在这种情况下需要强制转换?

来自分类Java

为什么Java的+ =,-=,* =,/ =复合赋值运算符不需要强制转换?

来自分类Dev

为什么在调用IEnumerable.Contains()时需要强制转换动态对象?

来自分类Dev

当where约束应该足够时,为什么需要强制转换泛型类型

来自分类Dev

为什么要强制转换为指针然后取消引用?

来自分类Dev

在以下算术和中是否需要强制转换?

来自分类Dev

FFmpeg:为什么我们需要在转换过程中创建临时文件

来自分类Dev

postgres varchar需要强制转换

来自分类Dev

为什么我们需要将本机Hibernate异常转换为Spring DataAccessExceptio

来自分类Dev

为什么我们需要将可选选项显式转换为Any?

来自分类Java

为什么我们需要先将double转换为字符串,然后才能将其转换为BigDecimal?

来自分类Dev

为了向下转换特征对象,为什么它必须是静态的?

来自分类Dev

为什么我们从MultiByte转换为WideChar?

来自分类Linux

为什么我们可以将sockaddr转换为sockaddr_in

Related 相关文章

  1. 1

    为什么我们要强制转换malloc的返回值?

  2. 2

    为什么我们使用强制转换通过C中的malloc分配堆内存?

  3. 3

    双重推导-为什么需要强制转换

  4. 4

    为什么此代码需要强制转换?

  5. 5

    为什么我们需要对 Parse 方法返回的对象进行强制转换?

  6. 6

    为什么我需要强制转换才能从基类访问实际值?

  7. 7

    为什么在此Java示例中需要强制转换HttpURLConnection?

  8. 8

    在C#中需要强制转换基值类型时

  9. 9

    为什么将变量声明为int类型需要强制转换流?长型不需要强制转换

  10. 10

    为什么一个接口实现需要强制转换而另一种则不需要强制转换?

  11. 11

    为什么我们不能将List <A>强制转换为List <B>

  12. 12

    为什么我们总是在Android / Java中键入强制类型转换?

  13. 13

    为什么使用 compose 方法需要强制转换,而不使用 andThen 方法

  14. 14

    为什么在这种情况下需要强制转换?

  15. 15

    为什么需要强制转换 Java 泛型方法参数类

  16. 16

    为什么在这种情况下需要强制转换?

  17. 17

    为什么Java的+ =,-=,* =,/ =复合赋值运算符不需要强制转换?

  18. 18

    为什么在调用IEnumerable.Contains()时需要强制转换动态对象?

  19. 19

    当where约束应该足够时,为什么需要强制转换泛型类型

  20. 20

    为什么要强制转换为指针然后取消引用?

  21. 21

    在以下算术和中是否需要强制转换?

  22. 22

    FFmpeg:为什么我们需要在转换过程中创建临时文件

  23. 23

    postgres varchar需要强制转换

  24. 24

    为什么我们需要将本机Hibernate异常转换为Spring DataAccessExceptio

  25. 25

    为什么我们需要将可选选项显式转换为Any?

  26. 26

    为什么我们需要先将double转换为字符串,然后才能将其转换为BigDecimal?

  27. 27

    为了向下转换特征对象,为什么它必须是静态的?

  28. 28

    为什么我们从MultiByte转换为WideChar?

  29. 29

    为什么我们可以将sockaddr转换为sockaddr_in

热门标签

归档