Почему строковый тип имеет.ToString () методом?

Почему тип данных String имеет a .ToString() метод?

46
задан Yuck 28 November 2017 в 14:24
поделиться

5 ответов

Тип System.String , как и почти все типы в .NET, является производным от системы .Объект . Объект имеет метод ToString () , поэтому String наследует этот метод. Это виртуальный метод, и String переопределяет его, чтобы вернуть ссылку на себя, а не использовать реализацию по умолчанию, которая должна возвращать имя типа.

Из Reflector это реализация ToString в Object :

public virtual string ToString()
{
    return this.GetType().ToString();
}

И это переопределение в String :

public override string ToString()
{
    return this;
}
71
ответ дан 26 November 2019 в 20:27
поделиться

Это верно даже для java, я думаю, что большинство объектно-ориентированных языков программирования имеют это строковое представление рассматриваемых объектов, поскольку каждый создаваемый вами класс по умолчанию он extedns from Object, что приводит к появлению метода toString (), помните, что он применим только к объектам, а не к премитивным типам.

2
ответ дан 26 November 2019 в 20:27
поделиться

Как отмечает Марк, он просто возвращает ссылку на себя. Но почему это важно? Все базовые типы должны возвращать строковое представление самих себя. Представьте себе функцию протоколирования, которая работает следующим образом:

public void Log(object o) {
    Console.WriteLine(o.ToString());
}

Это позволяет вам передавать любой базовый тип и записывать его содержимое в журнал. Если бы строка не возвращала себя, она бы просто вывела "String", а не свое содержимое. То же самое можно сделать с помощью функции-шаблона.

Думаете, это глупо? По сути, это то, что делают функции форматирования строк. Она вызывает "ToString", когда вы делаете следующее:

Console.WriteLine("{0}", myString);
9
ответ дан 26 November 2019 в 20:27
поделиться

Строка - это объект, а не тип данных. Поскольку String является объектом, он наследует от корневого объекта метод ToString ().

Это как в Java, Objective-C или Scala :)

2
ответ дан 26 November 2019 в 20:27
поделиться

Любой объект в C# имеет метод to string, хотя я не могу придумать причину, по которой можно было бы привести строку к строке в тот момент, когда ToString() наследуется от типа объекта, примером которого, конечно, является строка.

0
ответ дан 26 November 2019 в 20:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: