抽象类继承另一个抽象类问题

时间:2012-11-27 20:03:39

标签: c# .net inheritance abstract-class encapsulation

我有一个如下所示的继承架构:

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()方法;但是,上述声明是错误的。对此有任何帮助表示赞赏。感谢

2 个答案:

答案 0 :(得分:19)

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

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;
    }
}

我更正了引号,因为这个用例仍然没有多大意义,所以我希望你能提供更多的信息,或者这更有意义。

答案 1 :(得分:11)

只需从BaseFileAttachment

中删除重新声明即可
public abstract class BaseFileAttachment : BaseAttachment
{
}

BaseFileAttachment已经从GetName继承了摘要BaseAttachment声明。如果您真的想在BaseFileAttachment中再次提及它,请使用override关键字:

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