0

我需要在不知道类的类型的情况下访问该类的实例中的 const 类值,并且还能够在类本身上访问它。我怎样才能做到这一点?

我想要实现的示例:

public abstract class A { }

public class B : A
{
    public const int X = 50;
}
...
A b = new B();
b.X ???

这是非常不完整的,但我想要实现的是通过多态性(如果有意义的话)从 A 类型的变量访问 B 的 X 常量。

这是我试图实现这一目标的一种方法:

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

public class B : A
{
    public const int X = 50;
    public override int X { get { return B.X; } } // or return 50;
}

问题在于,由于 B 中 X 的重复定义,C# 不会让它编译。那么我应该怎么做呢?有没有更好的办法?或者我唯一的选择是以不同的方式命名它们?

4

2 回答 2

0

您想要的可能是静态只读成员:

public abstract class A {
    public static readonly int X=100;
}

public class B: A {
    public static readonly int X=50;
}

看看readonly。您可以将静态只读成员视为运行时常量。

如果您正在寻找一个可覆盖的常量/静态成员,那么您可能想看看如何实现虚拟静态属性?; 这在 C# 中甚至是不可能的

于 2013-05-16T00:18:35.023 回答
0

这样的事情应该做你:

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

class B : A
{
    public override int X { get { return 5 ; } }
}

通过将属性指定为抽象,您可以强制子类实现只读属性。虽然类型系统中没有办法要求具体实现实现抽象属性以使其值不变,但您的具体实现可能会自愿遵守规范。

于 2013-05-16T00:02:23.583 回答