C# 从C中的实例访问常量值#
我需要在不知道类的类型的情况下访问该类实例中的const类值,并且能够在类本身上访问它。我该怎么做 我想要实现的示例:C# 从C中的实例访问常量值#,c#,.net,class,constants,getter-setter,C#,.net,Class,Constants,Getter Setter,我需要在不知道类的类型的情况下访问该类实例中的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 cla
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;
}
但问题是C#不会让它编译,因为B中X的定义是重复的。那么我应该怎么做呢?有更好的办法吗?或者,我唯一的选择就是用不同的名称来命名它们?类似这样的东西应该对您有帮助:
abstract class A
{
public abstract int X { get ; }
}
class B : A
{
public override int X { get { return 5 ; } }
}
通过将属性指定为抽象属性,可以强制子类实现只读属性。虽然在类型系统中无法要求具体实现实现抽象属性以使其值不变,但您的具体实现可能会自愿遵守规范。您想要的可能是静态只读成员:
public abstract class A {
public static readonly int X=100;
}
public class B: A {
public static readonly int X=50;
}
看一看。您可以将静态成员视为运行时常量
如果您正在寻找一个可重写常量/静态membe,那么您可能需要查看;这在C#中是不可能的
public override int X{…
方法有什么问题?如果使用{get{return 50;}
有效。@MAV不,它不起作用,因为B中有X的多个定义。你应该删除public const int X=50;
,然后只进行覆盖。是的,我不知道你为什么觉得需要const值。这是某种强加的要求吗?我也需要在类上有这个值,这样我就可以像B一样访问它.X.正如我在其他评论中所写,我必须能够访问B类本身上的X。@Sh4rK:你说访问B类本身上的X是什么意思?正如ClassNameB.X
?@KenKin是的,就像静态变量或常量一样。@Sh4rK:所以你不想用实例访问X
。@KenKin我想用实例,没有实例。@Sh4rK:你的意思是你想让所有的A.X
和A.X
和B.X
和B.X
,其中X存在于一个类或一个实例中,并应用于这两个类吗?不,我想B.X
和B.X
@Sh4rK:B.X
和b.X
是不同的;您不能用与非实例成员相同的名称定义实例成员。我将寻找另一种解决方案then@Sh4rK:只需给他们起不同的名字,尽量不要做变通。此问题表示您遇到了设计错误的做法。