サブクラスで上書きする必要があるを実装する方法const field
、私は使用しています.net 4, C#
all have a const field
「pName」と呼ばれる(異なる値を持つ)多くのクラスがあるためです。
そのため、インターフェイスまたは抽象クラスなどを親として使用し、これらのクラスに強制的にオーバーライドさせたいと考えています。
それはCONST
フィールドです
;override
はできません。また、それを asとそこにconst
宣言することもできません。あなたができることはそれを再宣言することですが、それは堅牢ではありません-どのバージョンが使用されるかは、あなたが求めるものに依存します(完全にコンパイル時に-ポリモーフィズムとは完全に無関係です):static
override
public new const int Foo = 12;
virtual
またはabstract
プロパティを使用することをお勧めします。
public virtual int Foo { get { return 4; } } // subclasses *can* override
public abstract int Foo { get; } // subclasses *must* override
とoverride
:
public override int Foo { get { return 12; } }
できません。あなたができることは、そのように抽象的な読み取り専用プロパティを宣言することです
abstract class A
{
public abstract int ReadOnlyProp {get;}
}
class B : A
{
public override int ReadOnlyProp
{
get { return 42; }
}
}
要求は矛盾しています。オーバーライド可能な定数値を定義できないため、派生クラスで変更してください。
できることは、基本クラスでデフォルト値を定義し、派生クラスでそれをオーバーライドすることです。
public class Base
{
public static reaondly int DEFAULT_BASE_VALUE = 0,
private int _someValue = DEFAULT_BASE_VALUE; //ASSIGN DEFAULT VALUE
public virtual int SomeValue {
get {
return _someValue;
}
}
}
public class Derived : Base
{
public override int SomeValue {
get {
return -3; //CHANGE VALUE OF BASE CLASS
}
}
}
できません。定数は仮想メンバーではありません。
代わりにできることは、読み取り専用プロパティを持つことです。
public class BaseClass
{
public BaseClass()
{
}
protected int MyProperty { get { return 10; } }
}
public class DerivedClass : BaseClass
{
public DerivedClass()
{
}
protected override int MyProperty { get { return 20; } }
}