【发布时间】:2017-08-22 12:54:10
【问题描述】:
所以我试图理解 c# 中的向上转换和向下转换。
我的问题是,这张图是正确的还是我仍然遗漏了什么? 如果不正确,我在哪里可以找到正确表示这个概念的图表?
非常感谢任何帮助。
编辑: 首先,我为混乱道歉,我意识到图表不是很清楚,并且我在向下转换中犯了一个错误(其中 circle2 只能访问字符串 Colour,它应该可以访问所有属性)。 我会尝试更好地解释我想要表达的内容。
所以,下面是相应的代码:
public class Shape
{
public int Width {get;set;}
public int Height {get;set;}
public int X {get;set;}
public int Y {get;set;}
public void Draw()
{
//do something
}
}
public class Circle : Shape
{
public string Colour {get;set;}
}
public class Program
{
public static void Main(string[] args)
{
//Up-casting
Circle circle = new Circle(); //object is created
Shape shape = circle; // shape point to circle object
//Down-casting
Circle circle2 = (Circle)shape;
}
}
【问题讨论】:
-
图表旁边的代码代表向上转换和向下转换。我不知道这些图表本身要代表什么。
-
椭圆是否应该代表变量,即对对象的引用?
-
方格是否代表接口,圆柱体类是否实现了这些接口?
-
嗯,我正在努力理解更改和对象引用类型的概念。据我所知,当向上转换时,Circle 类型的圆和 Shape 类型的形状指向内存中的同一个对象/位置?并且形状和圆的所有属性都存在于该对象中。但是根据您使用的是形状还是圆形来限制对属性的访问?
-
当涉及到这样的类时,铸造实际上并没有改变类型,它只允许你“以不同的方式看待类型”。因此,将圆形向上转换为形状不会删除 Circle 类型添加的所有属性,向下转换也不会“将它们放回原处”,它们一直存在,只是当您查看时它们隐藏在视图之外通过形状参考在圆圈处。老实说,我没看懂你的图表。