【发布时间】:2014-07-22 03:10:23
【问题描述】:
我正在尝试覆盖基类 const/static 变量。但我得到编译器错误:
“Arc.CLASS_NAME”隐藏了继承的成员“Element.CLASS_NAME”。使用 如果打算隐藏,则使用新关键字
有没有办法覆盖这种变量?也许我需要将数据类型更改为public virtual static readonly?
public class Element {
public const string CLASS_NAME = "___ELEMENT___";
...
}
public class Arc : Element {
public const string CLASS_NAME = "___ARC___";
// Problem is: CLASS_NAME needs to be const to be used as a default argument
public Arc(uint nUTMZone=DEF_UTM_ZONE, string nName=CLASS_NAME) : base(nUTMZone, nName) {
}
}
【问题讨论】:
-
为什么不按照编译器的建议使用
new? -
@MichaelLiu 当编译器消息显示
hiding我从逻辑上讲,将其解释为将变量设为私有(而不是覆盖,这是下面答案的真正含义),我需要这个变量公开。 -
“隐藏”并不意味着私密;这意味着它会影响基类中的 CLASS_NAME。根据您的编辑,您应该使用
new。 -
你到底想在这里实现什么?
标签: c# inheritance