我想问一个关于继承的问题。 我有两个从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
答案 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();
这样你就不需要两次做所有的基类了。