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