Как метод ToString () переопределяется и форматируется в классе? - PullRequest
6 голосов
/ 14 апреля 2011

Я искал и Google, и этот сайт, чтобы найти ответ.Я также прочитал это в своей учебной книге, но я все еще не понимаю, как это применяется.

Вот что я знаю:

  • Используется для отображения того, что объект знает о себе.

  • Можетиспользоваться для форматирования вывода о том, что он знает о себе.

  • Он должен быть переопределен в используемом методе.

Ответы [ 4 ]

17 голосов
/ 14 апреля 2011

Думая, что у вас есть такой класс, как:

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

Использование этого:

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

раскроет все внутренности класса.На самом деле это лучше всего использовать для быстрого извлечения открытых полей класса в предварительно отформатированном виде (таким образом, эффективно преобразовывая данные, инкапсулированные в классе, в строку).

Также здесь очень полезный совет из книги Pro C # 2010 и платформа .NET 4 : «Многие создаваемые вами классы (и структуры) могут извлечь выгоду из переопределения ToString () для возврата текстового представления текущего состояния типа строки. Это может бытьвесьма полезен для целей отладки (среди прочих причин). Как вы решаете создать эту строку, зависит от вас, однако рекомендуется разделять каждую пару имя / значение точкой с запятой и заключать всю строку в квадратные скобки.Однако всегда помните, что правильное переопределение ToString () также должно учитывать любые данные, определенные в цепочке наследования. Когда вы переопределяете ToString () для класса, расширяющего пользовательский базовый класс, первым делом нужно получить ToString () значениеот вашего родителя, используя базовое ключевое слово.Получив строковые данные своего родителя, вы можете добавить пользовательскую информацию производного класса. "

2 голосов
/ 14 апреля 2011

Базовым классом для всех классов .NET является тип object. Класс объекта предоставляет реализацию по умолчанию ToString(), которая по умолчанию просто выводит имя класса, если только класс не переопределил метод ToString() для печати чего-либо еще. Имя класса не особенно полезно, поэтому обычно рекомендуется переопределять ToString() в любом написанном вами классе, потому что полезно обеспечить удобочитаемое представление вашего класса. Отладчик фактически использует вашу реализацию ToString() по умолчанию, когда вы хотите проверить экземпляр вашего класса.

В вашем классе все, что вам нужно сделать, это добавить этот метод:

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

Пример:

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);
    }
}

Обратите внимание, что метод string.Format - это просто способ создания строки. Первый аргумент для string.Format - это «формат», который может содержать литеральный текст, а также заполнители для значений, которые вы предоставите в качестве других аргументов. {0}, {1} и {2} выше являются заполнителями для аргументов FirstName, LastName и Age, которые передаются после формата. Я бы прочитал строку . Формат , если вы хотите узнать больше.

1 голос
/ 14 апреля 2011

Вы должны переопределить ToString () в вашем классе. Скажем, у меня есть класс с m_nDays, m_nHours, m_nMinutes ... тогда я могу переопределить ToString () следующим образом:

public override string ToString()
{
    return string.Format("{0,5}d - {1:00}:{2:00}", m_nDays, m_nHours, m_nMinutes);
}
1 голос
/ 14 апреля 2011

Переопределить ToString() Метод:

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

   public string LastName { get; set; }

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