C#获取子类属性值

时间:2013-07-24 08:34:05

标签: c# oop inheritance polymorphism

我正在努力做到这一点:

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

3 个答案:

答案 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);

当然,此ab之后将是完全不同的对象;改变一个不会影响另一个。

您还应该使用正确的术语以避免混淆:classBAttribute不是attribute,而是field

答案 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 (?)
}