从超类转换为子类

时间:2016-04-05 22:23:00

标签: c# object

在c#中如何将超类转换为子类以便使用与子类相关的特定方法,下面给出一个例子

Public class A{ 
}
Public class B:A{

MethodName;
}

我已经尝试了

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

但它没有用,有什么建议吗?

1 个答案:

答案 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的构造函数,并且会让您覆盖每个派生类中的抽象方法。