在c#中混淆了以下类型的转换

时间:2013-07-26 10:24:28

标签: c# .net casting

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

除了我们不能将基类对象强制转换为派生类对象之外,还有什么用途呢?

3 个答案:

答案 0 :(得分:3)

因为D不是来自B。地狱,即使它是,你只能从DB,而不是从另一个方向。

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

答案 1 :(得分:2)

因为D不是派生类。 评论不会影响代码 ;-)
目前它们并不相关,因此C#不知道如何将B投射到D

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

class D : B {
//...
}

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

答案 2 :(得分:1)

因为B不是来自D

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