访问实现的类方法

时间:2014-10-08 20:08:01

标签: c# oop

我想问一个关于继承的问题。 我有两个从AbsDoc

实现的类
public class A:AbsDoc
{
     public void SomeMethodA()
     {}
}


public class B:AbsDoc
{
     public void SomeMethod()
     {}
}

and one class to implement 

public class AbsDoc
{
     public void Doit(){};
     public void DoDiff(){};
}

当我需要访问这样的A类或B类方法时,我收到错误如何访问

AbsDoc temp=null; 

if(param=="A)
{
  temp=new A();
}
else 
{
  temp=new B();
}

temp.SomeMethodA();//it gets error when i try to access 

1 个答案:

答案 0 :(得分:2)

temp正如您所定义的那样是AbsDoc。它没有SomeMethodA因此您将收到编译器错误。这是预期的。例如,再次查看您的代码:

AbsDoc temp=null; 

if(param=="A")
{
  temp=new A();
}
else 
{
  temp=new B();
}

temp.SomeMethodA();//it gets error when i try to access 

param != "A"会发生什么?您的temp将是B而不是A,因此您无法拨打SomeMethodA。如果您想致电SomeMethodA,则需要投放temp

AbsDoc temp=null; 

if(param=="A")
{
  temp=new A();
  ((A)temp).SomeMethodA();
}
else 
{
  temp=new B();
  ((B)temp).SomeMethod();
}

根据你的评论,看起来你想要做的是这样的事情:

AbsDoc temp=null; 

if(param=="A")
{
  var a =new A();
  a.SomeMethodA();
  temp = a;
}
else 
{
  var b =new B();
  v.SomeMethod();
  temp = b;
}

temp.DoIt();

这样你就不需要两次做所有的基类了。