2012-11-27 190 views
5

我有一个继承的架构如下图所示:一个抽象类继承另一个抽象类问题

public abstract class BaseAttachment 
{ 
    public abstract string GetName(); 
} 

public abstract class BaseFileAttachment:BaseAttachment 
{ 
    public abstract string GetName(); 
} 

public class ExchangeFileAttachment:BaseFileAttachment 
{ 
    string name; 
    public override string GetName() 
    { 
     return name; 
    } 
} 

我基本上要调用ExchangeFileAttachment类的getName()方法;但是,上面的声明是错误的。任何帮助,这是表示赞赏。由于

+1

您是否打算在'BaseFileAttachment'上提供一个全新的'GetName'方法来隐藏'BaseAttachment.GetName'?如果没有,只需省略重新声明。 –

+0

为什么'ExchangeFileAttachment'声明为'abstract'? –

+2

“但是,上面的声明是错误的”你应该在你的问题中提供更多细节。它不会编译?它没有做你想做的事吗?如果是这样,那么错误或不良行为是什么? – Servy

回答

19

我看到的两个直接的问题是,你的最终ExchangeFileAttachment类被声明abstract,所以你永远无法实例化。除非你有另一种级别的继承,否则你没有向我们展示,调用它是不可能的 - 无法访问它。另一个问题是,BaseFileAttachment有一个隐藏在BaseAttachment中的GetName()的属性。在您向我们展示的结构中,它是多余的,可以省略。所以,“修正”的代码看起来更象:

public abstract class BaseAttachment 
{ 
    public abstract string GetName(); 
} 

public abstract class BaseFileAttachment : BaseAttachment 
{ 
} 

public class ExchangeFileAttachment : BaseFileAttachment 
{ 
    string name; 
    public override string GetName() 
    { 
     return name; 
    } 
} 

我在引号,因为这个用例仍然不会使一吨的感觉,所以我希望你能提供更多的信息放纠正,或本在你的结尾更有意义。

+0

此代码示例帮助我回答了完全不同的问题! –

11

刚刚从BaseFileAttachment删除重复声明:

public abstract class BaseFileAttachment : BaseAttachment 
{ 
} 

BaseFileAttachment已经继承BaseAttachment抽象GetName声明。如果你真的想在BaseFileAttachment再提起它,使用override关键字:

public abstract class BaseFileAttachment : BaseAttachment 
{ 
    public override abstract string GetName(); // that's fine as well 
} 
+0

这个作品!谢谢 – stoney78us