0

したがって、提供された AbstactSearchWithTwoLevelCache という抽象クラスがあります。その抽象プロパティはすべて、(get; を使用して) 読み取りアクセスのみを持ちます。セットを追加することは許可されていません。それらの抽象的なプロパティに。派生クラス SearchWithTwoLevelCache でこれを変更する方法はありますか? つまり、派生クラスでこれらのプロパティを設定する方法はありますか?

4

2 に答える 2

1

プロパティを でマークするとnew、次のように新しいプロパティを定義します。

abstract class BaseClass
{
    public int Property
    {
        get { ... }
    }
}

class NewClass : BaseClass
{
    public new int Property
    {
        get { return base.Property; }
        set { ... }
    }
}

編集:

上記は、基本クラスのプロパティが ではない場合に機能しますabstract。抽象的である場合、実装する必要があるため、これは機能しません。あなたが持っている1つのオプションは、次のように間にクラスを作成することです:

abstract class BaseClass
{
    public abstract int Property { get; }
}

class Between : BaseClass
{
    public override int Property
    {
        get { ... }
    }
}

class NewClass : Between
{
    public new int Property
    {
        get { return base.Property; }
        set { ... }
    }
}

ただし、これは決してエレガントなソリューションではありません。次に、本当の答えは、実際にはこれを行うことができないということになります (少なくとも上記の回避策がなければ)。

于 2013-06-25T11:00:38.023 に答える
1

それらを直接オーバーライドする方法は想像できません。抽象クラスのプロパティを間接的にオーバーライドすると、ゲッターはプライベート フィールドから取得でき、それらのフィールドを設定するセッターを持つ新しいプロパティを作成できます。

私が知っているリグの種類。たぶん、これを回避するよりエレガントな方法があります。

于 2013-06-25T11:02:55.907 に答える