2013-10-31 147 views
0

我是C#的初学者,并试图继承自己的手。 ClassA是基类,classB和classC是从classA派生的。我的程序类有静态方法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(); 
     } 
} 
+0

将MyMethod更改为public。 – Aron

回答

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 
    } 
} 
相关问题