0

我是 C# 的初学者,正在尝试继承。ClassA 是基类,而 classB 和 classC 是从 classA 派生的。我的 Program 类有静态方法 Show()。起初我不确定我会返回 objectB 还是 objectC。所以我不知道 Show() 方法的返回类型应该是什么。将返回类型设置为基类,即 classA 一开始解决了我的问题,但是当我尝试在 Main 中访问 MyMethod 时,它会抛出错误,因为 MyMethod 在 classA 中被声明为抽象。如何在返回的对象上调用 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();
        }
}
4

1 回答 1

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
    }
}
于 2013-10-31T01:03:47.850 回答