Far*_*an 2 c# downcast upcasting
我最近一直在研究 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将引用Circle.
这很好,因为你可以用 a 做的所有事情也可以Shape用Circle.
但是,如果您这样做:
circle = shape; // circle->(instance of Shape)
您正在为Shape参考分配Circle参考。你不能这样做,因为(如果这是可能的),那么你就能够访问Circle不存在的功能Shape。
例如,假设Circle.Radius存在但Shape.Radius不存在。
如果您被允许将circle引用指向aShape如果您尝试访问会发生什么circle.Radius?答案是:会发生未定义的行为,因为Shape.Radius不存在。
| 归档时间: | 
 | 
| 查看次数: | 450 次 | 
| 最近记录: |