有两个班级。从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类?
谢谢。
答案 0 :(得分:8)
简单地说,你不能 - B
是A
但A
不是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)
让我们替换A
和B
,希望这一点不可能更清晰:
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;