我正在努力做到这一点:
class A {
//attibutes
}
class B : A {
public int classBAttribute = 5;
// other attributes and methods
}
我的问题是,如果我有一个A类的实例,我怎样才能获得B类的实例或访问他的属性?
B b = new B();
Application.Add(b);
//other form
A a = Application.GetA();
B b = getBFromA(a);// ??? Note: B b = a as B; does't work i tried
答案 0 :(得分:1)
我的问题是,如果我有一个A类的实例我怎么能得到它 B类的实例或访问他的属性?
您的程序如何知道A的实例实际上是B类型?
B的实例可以用作A(因为B是A的特化),但相反的情况是不可能的。
答案 1 :(得分:1)
你不能这样做 - 通常没有神奇的方法从基础对象创建派生对象。
要启用此类方案类B
,需要定义一个接受A
参数的构造函数:
public B(A a)
{
// do whatever makes sense to create a B from an A
}
然后您可以将其用作
var b = new B(a);
当然,此a
和b
之后将是完全不同的对象;改变一个不会影响另一个。
答案 2 :(得分:1)
也许我不完全理解这个问题或答案,但是......
将A
投射到B
应该有效(只要A
实际上(也)是B
)。< / p>
A a = Application.GetA();
if(a is B)
{
B b = (B)a;
DoSomething(b.classBAttribute);
}
else
{
// TODO: Some fallback strategy or exception (?)
}