Reemplazar el método .ToString c #

Bien, entonces escribí este progtwig fuera del ejercicio de un libro de progtwigción C # (estoy tratando de aprender aquí) y me pide ” Anular el método ToString () para devolver todos los miembros de datos “.

¿He hecho esto correctamente? ¿O acabo de escribir correctamente un código que comstack pero no hace nada? ¿Cuál es el propósito de ToString ?

He pasado unos 30 minutos mirando otras publicaciones sobre esto y no me he dado cuenta, así que decidí hacer esto.

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication297 { class Program { static void Main(string[] args) { String name = "Stormtrooper"; Employee s = new Employee(name); Console.WriteLine("The type of hire is a {0}", s.Name); Console.WriteLine("The identification number is {0}", s.Number); Console.WriteLine("The date of hire is {0} ABY", s.Date); Console.WriteLine("The standard galactic salary is...{0:C}", s.Salary); } class Employee { private string _name; private string _number; private int _date; private int _salary; public string Name { get { return _name; } } public string Number { get { return _number; } } public int Date { get { return _date; } } public int Salary { get { return _salary; } } public Employee(string n) { _name = n; _number = "AA23TK421"; _date = 4; _salary = 800; } } public override string ToString() { return "_name + _number + _date + _salary".ToString(); } } } 

Está devolviendo una cadena que acaba de decir la frase _name + _number + _date + _salary .

Lo que probablemente quería hacer es construir una cadena usando esos campos. Si quisieras mezclarlos todos juntos, Concat funcionaría, pero sería muy difícil de leer

 public override string ToString() { return String.Concat(_name, _number, _date, _salary); } 

Sin embargo, lo que sería mejor es usar Format e incluir tags con los valores

 public override string ToString() { return String.Format("Name:{0}, Number:{1}, Date:{2}, Salary:{3}",_name, _number, _date, _salary); } 

Si está utilizando C # 6 o posterior, puede usar el siguiente formato de limpieza

 public override string ToString() { return $"Name:{_name}, Number:{_number}, Date:{_date}, Salary:{_salary}"; } 

Que es exactamente la misma lógica que la versión anterior de String.Format .

La razón por la que las personas anulan el método ToString() es tener una representación de cadena por defecto de su objeto, generalmente para mostrar al usuario o en un registro o consola, como este:

 Console.WriteLine(yourClassObject); 

Si no anula ToString() , entonces su implementación predeterminada es devolver el nombre completo de su objeto, así:

 YourNamespace.YourClassName 

Al cambiar la implementación heredada (de System.Object ), puede hacer una representación más agradable (léase: más bonita), como esta:

 public override string ToString() { return String.Format("This instance of my object has the following: Name = {0}, Number = {1}, Date = {2}, Salary = ${3}", _name, _number, _date, _salary); } 

Más bien intente algo como

 public override string ToString() { return String.Format("Name : {0}, number {1}, date {2}, salary {3}",_name,_number,_date,_salary); } 

Pero es necesario ser parte de la clase

asi que

 class Employee { private string _name; private string _number; private int _date; private int _salary; ..... public override string ToString() { return String.Format("Name : {0}, number {1}, date {2}, salary {3}",_name,_number,_date,_salary); } } 

Eche un vistazo al método String.Format

Reemplaza cada elemento de formato en una cadena especificada con el equivalente de texto del valor de un objeto correspondiente.

Podría tratar de formatear la salida en un formato agradable. (sin embargo, no probado)

 public override string ToString() { return string.Format("Name: {0} Number: {1:n0} Date: {2:yyyy-MM-dd} Salary: {3:n2}", _name, _number, _date, _salary); } 

hay muchos propósitos sobreescribiendo .ToString (), dependiendo del contexto. por ejemplo,

  • a algunos desarrolladores les gusta tener una descripción de objetos muy formateada al hacer depuración, sobrescribir .ToString () les permitiría tener una descripción significativa con algún identificador (por ejemplo, el Id de un objeto);
  • A algunos desarrolladores les gusta poner algún código de serialización en el método ToString ();
  • Algunos desarrolladores incluso ponen algún código de depuración en el método .ToString (), aunque podría no ser una buena práctica.

realmente depende del contexto de tus necesidades. puede encontrar algunas buenas prácticas para seguir en línea: cree que hay muchos recursos en línea.

Si usa C # 6 (o posterior) use el método nameof() para los nombres de propiedad en la cadena en caso de que cambien los nombres de propiedad. También puede usar la notación $"" lugar de usar string.Format ().

Por ejemplo:

 public override string ToString() { return $"{nameof(Name)}: {_name}"; } 

Sin superar ToString, si intentó “obtener” el valor de cadena de un empleado, por ej.

var employee1= new Employee(); Console.WriteLine(employee1);

Lo que obtendrías es:

ConsoleApplication1.Program + Employee

Que no proporciona información para ayudarlo a usted (o a su IU) a mostrar información relevante.

Utilizo return _name + _number + _date + _salary; Que por defecto es cadena,

o un más detallado

return "Name:" + _name + " Number:" + _number + " etc...";