1. ホーム
  2. c#

[解決済み] c#でプロパティをオーバーライドできますか?どのように?

2023-06-11 15:32:11

質問

このようなBaseクラスがあります。

abstract class Base
{
  public int x
  {
    get { throw new NotImplementedException(); }
  }
}

そして、次のような子孫。

class Derived : Base
{
  public int x
  {
    get { //Actual Implementaion }
  }
}

コンパイルすると、派生クラスの定義である x の定義が Base のものを隠してしまいます。c#でメソッドのようにプロパティをオーバーライドすることは可能でしょうか?

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

この場合 virtual キーワード

abstract class Base
{
  // use virtual keyword
  public virtual int x
  {
    get { throw new NotImplementedException(); }
  }
}

または抽象的なプロパティを定義します。

abstract class Base
{
  // use abstract keyword
  public abstract int x { get; }
}

とし override キーワードを使用します。

abstract class Derived : Base
{
  // use override keyword
  public override int x { get { ... } }
}

オーバーライドしない場合は new キーワードを使用して、親の定義を隠すことができます。

abstract class Derived : Base
{
  // use new keyword
  public new int x { get { ... } }
}