3

如何实现子类中的const fieldwhich 必须被覆盖,我正在使用.net 4, C#

因为我有很多类all have a const field(具有不同的值)称为“pName”。

所以我想使用接口或抽象类或其他东西作为父类并强制这些类覆盖它。

这是CONST

4

4 回答 4

6

你不能override; 你也const不能在那里声明它。您可以做的是重新声明它,但这并不可靠- 使用哪个版本取决于您要求的版本(完全在编译时 - 与多态性完全无关):staticoverride

public new const int Foo = 12;

我建议您使用virtualorabstract属性:

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

你的要求是矛盾的:你不能定义一个可以覆盖的常量值,所以在派生类中改变。

可以做的是在基类中定义默认值,并在派生类中覆盖它。

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 回答
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 回答