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

4

2 回答 2

20

我看到的两个直接问题是您的最终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;
    }
}

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

于 2012-11-27T20:12:26.107 回答
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
}
于 2012-11-27T20:10:09.393 回答