我有一个公共静态类,我想要一个ToString()方法。

我已将其定义为公共静态字符串ToString(),但收到以下警告:

  

'Class.ToString()'隐藏继承的成员'object.ToString()'。要使当前成员覆盖该实现,请添加override关键字。否则添加新关键字。

如果我添加override关键字,我会收到此错误:

  

静态成员'Class.ToString()'不能标记为覆盖,虚拟或抽象

如何摆脱该警告并让我的静态类具有ToString()方法。

谢谢,
基思

有帮助吗?

解决方案

是的,使用“新”字样修饰符将有效地使编译器警告静音,但您使用静态方法显式隐藏实例方法。 (这与覆盖方法不同。)通常,您不希望隐藏实例方法,除非有很好的理由,您实际上不应该使用静态方法隐藏它,因为这实际上会更改调用的行为语义。 .NET中的每个对象都有一个名为ToString()的实例方法,该方法具有开发人员期望的特定行为;通过使用新的静态方法隐藏该行为,您正在改变这种期望,这可能会导致很多混乱。

你是什么“串联”?静态类通常不保持内部状态,因此实际上不应该提供任何内部数据作为ToString()调用的逻辑输出。您可能需要重新考虑您的类设计或提供不同的方法名称,以更清楚地指示方法的目的而不隐藏实例ToString()。

其他提示

在静态类中,您无法覆盖ToString。 .ToString是一个实例方法,根据定义,静态类只能有静态成员。

另外,为什么要覆盖.ToString()?无法获取类的实例,因此无法调用该函数。

注意:使用新语法不会覆盖.ToString。它将创建一个与Object.ToString()方法完全无关的新成员。

好的,所以在提问时,我找到了答案:

新修饰符:

  

http://msdn.microsoft。 COM / EN-US /库/ 51y09td4(VS.71)的.aspx#vclrfnew_newmodifier

现在是方法:

  

public new static string ToString()

谢谢你, 基思

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top