我有一个公共静态类,我想要一个ToString()方法。
我已将其定义为公共静态字符串ToString(),但收到以下警告:
'Class.ToString()'隐藏继承的成员'object.ToString()'。要使当前成员覆盖该实现,请添加override关键字。否则添加新关键字。
如果我添加override关键字,我会收到此错误:
静态成员'Class.ToString()'不能标记为覆盖,虚拟或抽象
如何摆脱该警告并让我的静态类具有ToString()方法。
谢谢你,
基思
答案 0 :(得分:12)
是的,使用“new”修饰符将有效地使编译器警告静音,但您使用静态方法显式隐藏实例方法。 (这与覆盖方法不同。)通常,您不希望隐藏实例方法,除非有很好的理由,您实际上不应该使用静态方法隐藏它,因为这实际上会更改调用的行为语义。 .NET中的每个对象都有一个名为ToString()的实例方法,该方法具有开发人员期望的特定行为;通过使用新的静态方法隐藏该行为,您正在改变这种期望,这可能会导致很多混乱。
你有什么“穿线”?静态类通常不保持内部状态,因此实际上不应该提供任何内部数据作为ToString()调用的逻辑输出。您可能需要重新考虑您的类设计或提供不同的方法名称,以更清楚地指示方法的目的而不隐藏实例ToString()。
答案 1 :(得分:3)
在静态类中,您无法覆盖ToString。 .ToString是一个实例方法,根据定义,静态类只能有静态成员。
另外,为什么要覆盖.ToString()?无法获取类的实例,因此无法调用该函数。
注意:使用新语法不会覆盖.ToString。它将创建一个与Object.ToString()方法完全无关的新成员。
答案 2 :(得分:2)
好的,所以在提问时,我找到了答案:
新修饰符:
http://msdn.microsoft.com/en-us/library/51y09td4(VS.71).aspx#vclrfnew_newmodifier
现在是方法:
public new static string ToString()
谢谢你, 基思