Почему тип строковых данных имеет метод .ToString()
?
Почему тип строки имеет метод .ToString()?
Ответ 1
Тип System.String
, например почти типы в .NET, происходит от System.Object
. Object
имеет метод ToString()
, и поэтому String
наследует этот метод. Это виртуальный метод, и String
переопределяет его, чтобы вернуть ссылку на себя, а не использовать реализацию по умолчанию, которая должна возвращать имя типа.
Из Reflector это реализация ToString в Object
:
public virtual string ToString()
{
return this.GetType().ToString();
}
И это переопределение в String
:
public override string ToString()
{
return this;
}
Ответ 2
Как указывает Марк, он просто возвращает ссылку на себя. Но почему это важно? Все базовые типы должны возвращать строковое представление самих себя. Представьте себе функцию каротажа, которая работает следующим образом:
public void Log(object o) {
Console.WriteLine(o.ToString());
}
Это позволяет вам передавать любой базовый тип и регистрировать его содержимое. Не вернув строку, она просто вывела бы "String", а не содержимое. Вы также можете сделать то же самое с функцией шаблона.
Думаешь, это глупо? Это в основном то, что делают функции форматирования строк. Он вызывает "ToString", когда вы это делаете:
Console.WriteLine("{0}", myString);
Ответ 3
String - это объект, это не тип данных. Поскольку String является объектом, он наследует от Root Object метод ToString().
Это как в Java, Objective-C или Scala:)
Ответ 4
Это даже верно для java, я думаю, что большинство языков программирования с объектно-ориентированным программированием имеют это строковое представление объектов, о которых идет речь, поскольку каждый класс, который вы создаете по умолчанию, extedns из Object, таким образом, приводит к методу toString(), помните, что он применим только к объектам не для предикатных типов.
Ответ 5
Любой объект в С# имеет строковый метод, хотя я не могу придумать причину, по которой вы производите строку для строки в момент, когда ToString() наследуется от типа объекта, что, конечно, строка является примером.
Ответ 6
Вы получите Null Reference Exception, если ваша строка NULL, и вы используете .ToString();
Следующее выдает:
string.Format("msgBoxTitle = {0}", msgBoxTitle.ToString())
Лучше всего писать... Это не будет бросать.
string.Format("msgBoxTitle = {0}", msgBoxTitle)