1. ホーム
  2. c#

[解決済み] getを上書きし、setを上書きしない

2023-05-29 05:31:01

質問

抽象クラスがあり、そのクラスは get を定義していますが set というのは、その抽象クラスに関する限り、そのクラスが必要とするのは get .

public abstract BaseClass
{
  public abstract double MyPop
  {get;}
}

しかし,いくつかの派生クラスで set プロパティが必要なので、この実装を検討しています。

public class DClass: BaseClass
{
  public override double MyPop
  {get;set;}
}

問題は、コンパイルエラーが発生し、次のように表示されたことです。

*.set: オーバーライドできません。なぜなら *.はオーバーライド可能なセットアクセッサを持っていないからです。

上記の構文が完全に正当だと思うのに。

これに関して何かアイデアはありますか?回避策、またはなぜそうなのか?

編集:私が思いつく唯一のアプローチは、両方の getset を抽象クラスと同様に投げさせ、サブクラスは NotImplementedException もし set が呼び出され、それが必要でない場合。それは私が好まないものであり、それと一緒に 特殊なセッター・メソッド .

どのように解決するのですか?

C# 6.0での新機能です。

コンストラクタ内でセッタを呼び出すだけであれば、読み取り専用のプロパティを使用してこの問題を解決することができます。

void Main()
{
    BaseClass demo = new DClass(3.6);
}

public abstract class BaseClass
{
    public abstract double MyPop{ get; }
}

public class DClass : BaseClass
{
    public override double MyPop { get; }
    public DClass(double myPop) { MyPop = myPop;}
}