class B{
// Base class
}
class D : B{
//Derived class from B
}
//create objects
B b1 = new B();
D d1 = new D();
//why the following is not right?
D d2 = (D) b1;
//以下是正确的吗? B b1 = d1;
那么为什么以下工作:
class Test
{
static void Main()
{
double x = 1234.7;
int a;
a = (int)x; // cast double to int
System.Console.WriteLine(a);
}
}
除了我们不能将基类对象强制转换为派生类对象之外,还有什么用途呢?
答案 0 :(得分:3)
因为D
不是来自B
。地狱,即使它是,你只能从D
到B
,而不是从另一个方向。
这是因为它们是完全独立的类。他们具有完全相同的属性(无)的事实改变了没有。
答案 1 :(得分:2)
因为D
不是派生类。 评论不会影响代码 ;-)
目前它们并不相关,因此C#不知道如何将B
投射到D
。
将其更改为派生类可能是个好主意:
class D : B {
//...
}
但您仍然无法将基类强制转换为更具体的类。
答案 2 :(得分:1)
因为B
不是来自D
。
如果D定义了新的字段或属性,那么为什么这是一个问题的关键示例将是什么。 b1没有实现这个,也没有字段值的存储。