在c#中如何将超类转换为子类以便使用与子类相关的特定方法,下面给出一个例子
Public class A{
}
Public class B:A{
MethodName;
}
我已经尝试了
A a= new A;
(B) b=(B)(a);
b.MethodName();
但它没有用,有什么建议吗?
答案 0 :(得分:0)
您无法将基类转换为它的派生类; @PaulAbbott在评论中解释了原因。但是,如果基类的对象包含派生类的值,则可以使用as
运算符捕获派生类的对象,以调用方法:
A a = new B();
B b = (a as B); //Try to capture the value of "a" into an object of type "B"; and if you fail, return null
if(b != null) //If "a" really holds a value of type "B"
b.MethodName();
abstract method
中的另一个选项是abstract class
;但在这种情况下,您必须使A
抽象(abstract class A
)。
abstract class A
{
public abstract void MethodName();
}
class B : A
{
public override void MethodName()
{
//...
}
}
和
A a = new B();
a.MethodName(); //See which derived class do I ("a") hold his value, and call the overridden method from there ("B")
但是这会阻止您使用A
的构造函数,并且会让您覆盖每个派生类中的抽象方法。