2015-10-16 5 views
0

Я начинаю программировать на C# и недавно начал работать над степенью бакалавра. То, что я пытаюсь сказать, я новичок.Зачем мне нужно переопределять ToString?

Я отметил место, где у меня возникла проблема. Проблема в том, что я не понимаю, почему мне нужно вообще переопределить код.

Существует 2 var объекта типа (сначала и для отдыха).

public Pair() 
    { 
    first = rest = null; 
    } 

public Pair(Object o) 
    { 
    first = o; 
    rest = null; 
    } 

public Object First() 
    { 
    return(first); 
    } 
public Object Rest() 
    { 
    return(rest); 
    } 

public Pair Connect(Object o) 
    { 
    rest = o; 
    return(this); 
    } 

// Вот «переопределяющая строка ToString». Я не понимаю. Почему мне нужно переопределить это?

public override string ToString() 
    { 
    string output = "("; 
Pair p = this; 
while (p != null) { 
     if (p.First() == null) 
     output += "NULL"; 
     else 
     output += p.First().ToString(); 
     if (p.Rest() is Pair) 
    p = (Pair)(p.Rest()); 
     else { 
    if (p.Rest() != null) 
      output += " . " + rest.ToString(); 
    break; 
    } 
    output += " "; 
} 
    output += ")"; 
    return(output); 
} 
+1

Вам не нужно переопределять его, однако он полезен во многих сценариях. Как в «Исключениях» или когда вы «отлаживаете». Если вы делаете 'Console.WriteLine (new Pair()),' он на самом деле вызовет метод ToString – kevintjuh93

+0

. У каждого объекта есть ToString, изображение у вас есть класс Person, и у него были такие свойства, как FirstName, Lastname и т. Д. предпочтительнее переопределить метод ToString для возврата, например, FirstName + "" + Surname. Вместо по умолчанию «NameSpace.Person» –

+0

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

ответ

0

Вы override метод ToString всякий раз, когда у вас есть объект, и вы хотели бы изменить так, как это представлено в виде строки.

Обычно это делается для параметров форматирования, так что, когда вы печатаете элементы на консоли, вы контролируете, как они отображаются, кто их когда-либо просматривает.

Например, учитывая этот класс:

class Person 
    { 
     public int Age { get; set; } 
     public string Name { get; set; } 
    } 

Печать экземпляра класса Person на консоль даст: namespace+classname, что с точки зрения читаемости не является идеальным.

Изменение класса к этому:

class Person 
    { 
     public int Age { get; set; } 
     public string Name { get; set; } 

     public override string ToString() 
     { 
      return String.Format("Name: {0} Age: {1}.", this.Name, this.Age); 
     } 
    } 

Урожайность: Name: ... Age: ... где многоточие обозначены значения, предусмотренные. Это более читаемо, чем предыдущий сценарий.

+0

Возможно, вам стоит упомянуть причину, по которой вам нужно переопределить ее, потому что она уже реализована в классе Object, из которого происходят все остальные объекты. – kskyriacou

+0

@kyriacos_k: Этот ответ уже позаботился о «Амадане». – npinti

+0

Не было в то время, когда я разместил комментарий, хорошо! – kskyriacou

0

Если у вас возникли вопросы, почему бы не использовать ToString? ", Npinti имеет ответ.

Если ваш вопрос «почему я использую override на ToString, но не на других методах», то ответ: потому, что ToString определяется на классах предка, и другие методы, которые вы определяете не являются. Компилятор будет жаловаться, если вы переопределите унаследованный метод без пометки его ключевым словом override, точно так же, как проверка работоспособности, чтобы убедиться, что это действительно то, что вы хотели сделать, или если вы забыли, что этот метод существует в родословной.

Смежные вопросы