-3
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);
    }
}

此外,如果我们不能将基类对象强制转换为派生类对象,那么强制转换的概念有什么用呢?

4

3 回答 3

3

因为D不是衍生自B. 见鬼,即使是这样,你也只能从Dto去B,而不是相反。

这是因为它们是完全独立的类。它们具有完全相同的属性(无)这一事实没有改变

于 2013-07-26T10:26:59.807 回答
2

因为D不是派生类。注释不会影响代码;-) 就目前而言
,它们没有任何关系,所以 C# 不知道如何将 aB转换为 a D

将其更改为派生类可能是一个好主意:

class D : B {
//...
}

但是,您仍然无法将基类转换为更具体的类。

于 2013-07-26T10:29:46.807 回答
1

因为B不是衍生自D.

如果 D 定义了一个新字段或属性,那么为什么这是一个问题的关键示例。b1 将没有实现这一点,也没有字段值的存储。

于 2013-07-26T10:28:42.243 回答