web-dev-qa-db-ja.com

C#で抽象定数とオーバーライド定数を使用するにはどうすればよいですか?

以下の私のコードはコンパイルされません。私は何が間違っているのですか?私は基本的に、基本クラスでオーバーライドされるパブリック定数を作成しようとしています。

public abstract class MyBaseClass
{
  public abstract const string bank = "???";
}

public class SomeBankClass : MyBaseClass
{
  public override const string bank = "Some Bank";
}

いつもお世話になってくれてありがとう!

38
Chris

定数がオブジェクトを記述している場合、それはプロパティである必要があります。定数は、その名前で変更されるべきではなく、ポリモーフィズムの影響を受けないように設計されています。同じことが静的変数にも当てはまります。

基本クラスに抽象プロパティ(またはデフォルト値が必要な場合は仮想)を作成できます。

public abstract string Bank { get; }

次に、次のようにオーバーライドします。

public override string Bank { get { return "Some bank"; } }
46

あなたがやろうとしていることはできません。 staticconstは上書きできません。オーバーライドできるのは、インスタンスのプロパティとメソッドのみです。

そのbankフィールドをプロパティに変換し、次のように抽象として販売できます。

public abstract string Bank { get; }

次に、これまでと同じように、継承されたクラスでオーバーライドします。

public override string Bank { get { return "Charter One"; } }

これがお役に立てば幸いです。裏側では、あなたもすることができます

public const string Bank = "???";

次に、継承されたクラスで

public const string Bank = "Charter One";

staticconstはポリモーフィズムの外部で動作するため、オーバーライドする必要はありません。

16
Nick Berardi

「const」を使い続けたい場合は、上記を少し変更してください。

public abstract string Bank { get; } 

次に、次のようにオーバーライドします。

private const string bank = "Some Bank"; 
public override string Bank { get { return bank;} }  

そして、プロパティは派生型から「const」を返します。

4
Brady Moritz