我有一个Shape包含两个派生类的基类Circle和Rectangle. 现在我已经编写了从Rectangle到 的显式转换,Circle反之亦然。它们没有多大意义,但这不是我现在的意思。我创建了新的Rectangle和Circle实例,并希望通过强制转换将其分配Rectangle给Circle。这按预期工作。但是,如果我有一个类型为 的数组Shape,其中填充了Rectangles,并且想要转换数组的成员,它会抛出一个System.InvalidCastException. 因为我已经写了明确的演员表,所以我不知道为什么这是不可能的。Shape[] arr = new Shape[5];Circle c1 = new Circle(1, 2, 3);Circle c2 = new Circle(4, 5, 6);Rectangle r1 = new Rectangle(7, 8);Rectangle r2 = new Rectangle(9, 10);Shape c3 = new Circle(3, 9, 13);arr[0] = c1;arr[1] = c2;arr[2] = r1;arr[3] = r2;arr[4] = c3;Console.WriteLine(r1.GetType());Console.WriteLine(arr[2].GetType()); // both evalute to RectangleCircle r3 = (Circle)r1; // compilesCircle r4 = (Circle)arr[2]; // Unhandled Exception好的,正如 Ondrej 指出的那样,这是从形状到圆形的转换,这是不允许的。然而,ingvar 指出这是可行的:Circle r5 = (Circle)((Rectangle)arr[2]); Rectangle r6 = (Rectangle)((Circle)arr[0]);这不是Circle r5 = (Circle)arr[2]; Rectangle r6 = (Rectangle)arr[0];谢谢你的帮助!
- 2 回答
- 0 关注
- 112 浏览
添加回答
举报
0/150
提交
取消