从派生/基类的对象调用抽象方法

时间:2013-10-31 01:00:06

标签: c# inheritance

我是C#的初学者,并尝试继承。 ClassA是基类,classB和classC派生自classA。我的Program类有静态方法Show()。起初我不确定我是否会返回objectB或objectC。所以我不知道应该返回什么类型的方法Show()。将返回类型设置为基类,即classA首先解决了我的问题,但是当我尝试访问Main中的MyMethod时,它会抛出错误,因为MyMethod在classA中被声明为abstract。如何在返回的对象上调用MyMethod?

abstract class classA
{
    protected abstract void MyMethod();
    // other fields and methods
}

class classB: classA
{
    protected override MyMethod()
    {
        //logic
    }
}

class classC: classA
{
protected override MyMethod()
    {
    //logic
    }
 }


class Program
{
    public static classA Show()
        {
            if(condition)
                { //logic
                return objectB;  //objectB is instantiated from classB
                }
            else
                {//logic
                return objectC;  //objectC is instantiated from classC
                }
        }

    static void Main(string[] args)
        {
         ClassA myObject = Show();
         myObject.MyMethod();
        }
}

1 个答案:

答案 0 :(得分:1)

你应该公开MyMethod。

abstract class classA
{
    public abstract void MyMethod();
    // other fields and methods
}

internal class classB : classA
{
    public override void MyMethod()
    {
        //logic
    }
}

internal class classC : classA
{
    public override void MyMethod()
    {
        //logic
    }
}