如何将对象转换为基数为“更高”的另一个对象?

时间:2011-01-14 19:32:31

标签: c#

有两个班级。从A开始的B级。

class A
{  }

class B  : A
{  
    public B()
    {  

    }
    public int Number { get; private set; }
}

这给了我“无法从A转换为B”的错误。

void Test()
{
    var a = new A();
    var b = (B)a;     // <== unable to cast.
}

如何将变量A中的对象转换为B类?

谢谢。

7 个答案:

答案 0 :(得分:8)

简单地说,你不能 - BAA不是B

答案 1 :(得分:6)

您的代码失败,因为您没有B。

如果您创建的是B而不是A:

,则可以执行此操作
A a = new B();
B b = (B)a;

您可以将A视为Animal,将B视为Bear

你总是可以说熊是一种动物,但如果你所拥有的只是一种未知的动物,你就不能总是把它变成熊。只有在 是熊的情况下才有效。

答案 2 :(得分:3)

你不能 - A a B.简单明了。

答案 3 :(得分:2)

您不能将基类置于其派生类中。你可以反过来。

答案 4 :(得分:1)

你做不到。您可以的目的是在B中提供一个以A为参数的构造函数,并根据该实例创建一个新的B实例:

class B : A
{
    public B() { }

    public B(A original)
    {
        // copy values from original to this
    }

    public int Number { get; private set; }

}

然后你可以这样做

A a = new A();
B b = new B(a);

答案 5 :(得分:0)

你不能 - a是A,它不是B。

答案 6 :(得分:0)

让我们替换AB,希望这一点不可能更清晰:

class Fruit
{ }

class Apple : Fruit
{ }

class Banana : Fruit
{ }

// If what you wanted to do were possible...
Fruit f = new Apple();

// ...then this should be possible (but how does one magically transform
// an apple into a banana?)
Banana b = (Banana)f;