Pregunta

Tengo una clase estática pública en la que me gustaría tener un método ToString ().

Lo he definido como una cadena pública estática ToString (), pero recibo la siguiente advertencia:

  

'Class.ToString ()' oculta el miembro heredado 'object.ToString ()'. Para hacer que el miembro actual anule esa implementación, agregue la palabra clave de anulación. De lo contrario, agregue la nueva palabra clave.

Si agrego la palabra clave de anulación, aparece este error:

  

Un miembro estático 'Class.ToString ()' no se puede marcar como override, virtual o abstract

¿Cómo me deshago de esa advertencia y dejo que mi clase estática tenga el método ToString ()?

Gracias,
Keith

¿Fue útil?

Solución

Sí, usando el " nuevo " El modificador silenciará efectivamente la advertencia del compilador, pero está ocultando explícitamente un método de instancia con un método estático. (Esto es diferente a anular el método). Por lo general, no desea ocultar un método de instancia, excepto con muy buenas razones, y realmente no debe ocultarlo con un método estático, ya que eso realmente cambia la semántica de comportamiento de la llamada. Cada objeto en .NET tiene un método de instancia llamado ToString () que tiene un comportamiento específico que los desarrolladores esperan; Al ocultar ese comportamiento con un nuevo método estático, está cambiando esa expectativa que puede generar mucha confusión.

¿Qué estás "encadenando"? Las clases estáticas generalmente no tienen estado interno, por lo que realmente no debería haber ningún dato interno para proporcionar como salida lógica de una llamada ToString (). Es posible que desee repensar el diseño de su clase o proporcionar un nombre de método diferente que indique más claramente el propósito del método sin ocultar la instancia ToString ().

Otros consejos

En una clase estática no puede anular ToString. .ToString es un método de instancia y, por definición, una clase estática solo puede tener miembros estáticos.

Además, ¿por qué querrías anular .ToString ()? No hay forma de obtener una instancia de la clase y, por lo tanto, no hay forma de llamar a la función.

Nota: El uso de la nueva sintaxis no anulará .ToString. Creará un nuevo miembro que no tiene ninguna relación con el método Object.ToString ().

Ok, entonces al hacer la pregunta, encontré una respuesta:

El nuevo modificador:

  

http://msdn.microsoft. com / es-us / library / 51y09td4 (VS.71) .aspx # vclrfnew_newmodifier

aquí está el método ahora:

  

nueva cadena estática pública ToString ()

Gracias Keith

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top