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

私が目にする2つの差し迫った問題は、最終ExchangeFileAttachmentクラスが宣言されabstractているため、インスタンス化できないことです。あなたが私たちに見せていない別のレベルの継承がない限り、それを呼び出すことはできません-それにアクセスする方法はありません。もう1つの問題は、を非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 に答える