3

サブクラスで上書きする必要があるを実装する方法const field、私は使用しています.net 4, C#

all have a const field「pName」と呼ばれる(異なる値を持つ)多くのクラスがあるためです。

そのため、インターフェイスまたは抽象クラスなどを親として使用し、これらのクラスに強制的にオーバーライドさせたいと考えています。

それはCONSTフィールドです

4

4 に答える 4

6

;overrideはできません。また、それを asとそこにconst宣言することもできません。あなたができることはそれを再宣言することですが、それは堅牢ではありません-どのバージョンが使用されるかは、あなたが求めるものに依存します(完全にコンパイル時に-ポリモーフィズムとは完全に無関係です):staticoverride

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; } }
于 2012-08-28T08:55:29.810 に答える
1

できません。あなたができることは、そのように抽象的な読み取り専用プロパティを宣言することです

abstract class A
{
        public abstract int ReadOnlyProp {get;}
}

class B : A
{
    public override int ReadOnlyProp
    {
        get { return 42; }
    }
}
于 2012-08-28T08:56:51.170 に答える
1

要求は矛盾しています。オーバーライド可能な定数値を定義できないため、派生クラスで変更してください。

できることは、基本クラスでデフォルト値を定義し、派生クラスでそれをオーバーライドすることです。

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 
        }
    } 
}
于 2012-08-28T08:55:05.253 に答える
1

できません。定数は仮想メンバーではありません。

代わりにできることは、読み取り専用プロパティを持つことです。

public class BaseClass
{
    public BaseClass()
    {
    }

    protected int MyProperty { get { return 10; } }
}

public class DerivedClass : BaseClass
{
    public DerivedClass()
    {
    }

    protected override int MyProperty { get { return 20; } }
}
于 2012-08-28T08:55:05.933 に答える