0

私はC#の初心者で、継承を試しています。ClassA は基本クラスであり、classB と classC は classA から派生しています。私の Program クラスには静的メソッド Show() があります。最初は、objectB と objectC のどちらを返すかわかりませんでした。そのため、メソッド Show() の戻り値の型がどうあるべきかわかりませんでした。戻り値の型を基本クラス、つまりclassAに設定すると、最初は問題が解決しましたが、メインの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();
        }
}
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 に答える