2011-04-14 7 views
6

He buscado tanto en Google como en este sitio para encontrar una respuesta. También lo he leído en mi libro de clase, pero todavía no entiendo cómo se aplica.¿Cómo se sobrescribe y formatea el método ToString() dentro de una clase?

Esto es lo que sé:

  • Se utiliza para mostrar lo que un objeto sabe sobre sí mismo.

  • Se puede utilizar para formatear el resultado sobre lo que sabe sobre sí mismo.

  • Debe ser anulado en el método que se utilizará.

+0

¿No estoy seguro de lo que está preguntando aquí? –

+1

@Kyle Creo que estoy buscando aprender cómo se aplica String, tal vez de una manera diferente a mi libro. Me falta algo, y espero que una de las respuestas ayude. –

Respuesta

16

pensamiento que tiene una clase como:

public class Person 
{ 
    public string FirstName { get; set;} 
    public string LastName { get; set;} 
    private string age; 
} 

El uso de este:

public override string ToString() 
{ 
    return string.Format("[First Name: {0}; Last Name: {1}; Age: {2}]", FirstName, LastName, age); 
} 

revelará todos los detalles internos de la clase. En realidad, se utiliza mejor para recuperar rápidamente los campos públicos de la clase en una forma preformateada (convirtiendo efectivamente los datos encapsulados en la clase en una cadena).

También aquí es un consejo muy útil desde el libro Pro C# 2010 y el .NET 4 Plataforma: "Muchas clases (y estructuras) que crea pueden beneficiarse de anulando ToString() con el fin de devolver un texto string representación del estado actual del tipo. Esto puede ser muy útil para la depuración (entre otras razones). La forma en que elige construir esta cadena es una cuestión de elección personal, sin embargo, un enfoque recomendado es separar cada par de nombre/valor con punto y coma y envolver toda la cadena entre corchetes. Sin embargo, siempre recuerde que una anulación correcta de ToString() también debe tener en cuenta los datos definidos en la cadena de herencia. Cuando anula ToString() para una clase que extiende una clase base personalizada, la La primera orden del día es obtener el valor ToString() de su matriz. ing la palabra clave básica Una vez que haya obtenido datos de la cadena de sus padres, puede añadir información personalizada de la clase derivada "

+0

Bien. ¿De dónde viene la parte del string.Format? –

+1

Además de lo que ha mostrado anteriormente, una de las razones por las que me gusta sobrescribir ToString() es para depuración. Cuando se ejecuta en modo de depuración y coloca el cursor sobre un objeto o mira un objeto, etc., usa ToString() para formatear lo que se muestra. –

+0

@Justin string.format proviene del espacio de nombres del sistema. –

1

Anulación ToString() método:..

public class Test 
{ 
    public string FirstName { get; set; } 

    public string LastName { get; set; } 

    public override string ToString() 
    { 
     // Do your formatting here 
     return LastName + ", " + FirstName; 
    } 
} 
1

Tiene que reemplazar ToString() en su clase Decir que tengo una clase con m_nDays, m_nHours, m_nMinutes ... entonces podría invalidar ToString() de la siguiente manera:

public override string ToString() 
{ 
    return string.Format("{0,5}d - {1:00}:{2:00}", m_nDays, m_nHours, m_nMinutes); 
} 
2

la clase base para todas las clases de .NET es el tipo object la clase de objeto proporciona una implementación por defecto de.que de forma predeterminada solo imprime el nombre de la clase, a menos que la clase haya anulado el método ToString() para imprimir algo más. El nombre de la clase no es particularmente útil, por lo que generalmente es una buena práctica anular ToString() en cualquier clase que escriba, porque es útil para proporcionar una representación legible por humanos de su clase. El depurador realmente utilizará su implementación ToString() de forma predeterminada cuando desee inspeccionar una instancia de su clase.

En su clase, todo lo que tiene que hacer es añadir este método:

public override string ToString() 
{ 
    // return a string that has something to do with your class 
} 

Ejemplo:

public class Person 
{ 
    public string FirstName {get;set;} 
    public string LastName {get;set;} 
    public int Age {get;set;} 

    public override void ToString() 
    { 
     // return whatever makes sense here... 
     return string.Format("[Person: FirstName={0}, LastName={1}, Age={2}]", FirstName, LastName, Age); 
    } 
} 

Nota el método string.Format es sólo una manera de crear una cadena. El primer argumento para string.Format es el "formato", que puede contener texto literal y marcadores de posición para valores que proporcionará como los otros argumentos. El {0}, {1} y {2} anteriores son marcadores de posición para los argumentos FirstName, LastName y Age que se pasan después del formato. Leería en string.Format si quiere saber más.

Cuestiones relacionadas