gpt4 book ai didi

c# - 在 C# 中编写向上转型和向下转型表达式

转载 作者:太空宇宙 更新时间:2023-11-03 17:37:50 25 4
gpt4 key购买 nike

我最近一直在研究 C# 中的向上转型和向下转型。我理解向上转型是指从派生类到基类的转换。然而,当我看到向上转换的实际例子(如下所示)时,我感到困惑。

public class Shape 
{
...
}

public class Circle : Shape
{
...
}

Circle circle = new Circle();
Shape shape = new Shape();
// Converting an object into its base class reference
shape = circle

如果我们将 circle 转换成它的基类引用,它不应该像

circle = shape 

抱歉,如果这听起来太业余了。这是因为我一直看到如下格式的表达式:

int x = 3; // means assign 3 to variable x. 

所以我很困惑为什么圆圈在右手边而不是在左手边。请指教。把我当作初学者。

最佳答案

(旁白:这称为向上转型,因为传统上,绘制类图时基类在物理上显示在派生类之上。)

现在当你这样做的时候:

shape = circle; // shape->(instance of Circle)

您正在将 Circle 引用分配给 Shape 引用,以便在分配后引用 shape 将引用 圆圈

这很好,因为您可以用 Shape 做的所有事情您也可以用 Circle 做。

但是,如果您这样做:

circle = shape; // circle->(instance of Shape)

您正在将 Shape 引用分配给 Circle 引用。您不能这样做,因为(如果可能的话)您将能够访问 Shape 中不存在的 Circle 功能。

例如,假设 Circle.Radius 存在但 Shape.Radius 不存在。

如果允许您将 circle 引用指向 Shape 如果您尝试访问 circle.Radius 会发生什么?答案是:会发生未定义的行为,因为 Shape.Radius 不存在。

关于c# - 在 C# 中编写向上转型和向下转型表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52964251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com