50 votes

Pourquoi le type chaîne possède-t-il une méthode .ToString() ?

Pourquoi le type de données string a un .ToString() méthode ?

75voto

Mark Byers Points 318575

Le type System.String comme presque tous les types dans .NET, dérive de System.Object . Object a un ToString() et donc String hérite de cette méthode. Il s'agit d'une méthode virtuelle et String le surcharge pour qu'il renvoie une référence à lui-même plutôt que d'utiliser l'implémentation par défaut qui consiste à renvoyer le nom du type.

Depuis Reflector, voici l'implémentation de ToString en Object :

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

Et c'est la surcharge dans String :

public override string ToString()
{
    return this;
}

10voto

Erik Funkenbusch Points 53436

Comme Mark le souligne, il renvoie simplement une référence à lui-même. Mais pourquoi est-ce important ? Tous les types de base devraient renvoyer une représentation sous forme de chaîne de caractères d'eux-mêmes. Imaginez une fonction de journalisation qui fonctionne comme ceci :

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

Cela vous permet de passer n'importe quel type de base et d'enregistrer son contenu. Si string n'était pas retourné, il afficherait simplement "String" au lieu de son contenu. Vous pouvez également faire la même chose avec une fonction modèle.

Vous pensez que c'est stupide ? C'est en fait ce que font les fonctions de formatage des chaînes de caractères. Il appelle "ToString" quand vous faites ça :

Console.WriteLine("{0}", myString);

3voto

vodkhang Points 11222

String est un objet, ce n'est pas un type de données. Parce que String est un objet, il hérite de l'objet racine la méthode ToString().

C'est comme en Java, Objective-C ou Scala :)

0 votes

Cela m'a surpris :), je pensais juste que C# est comme Java, il n'y a pas de méthode toString pour ces choses :)

0 votes

Il n'est pas en majuscule car il s'agit d'un alias. Après la compilation, cet alias sera converti en une chaîne de caractères en majuscules.

0 votes

Non, la chaîne n'est jamais mise en boîte pour devenir un objet. stackoverflow.com/questions/215255/string-vs-string-in-c

3voto

G.E.B Points 11

C'est même vrai pour java, je pense que la plupart des langages de programmation orientés objet ont ceci, une représentation en chaîne des objets en question, puisque chaque classe que vous créez par défaut extedne de l'objet résultant ainsi en ayant la méthode toString(), rappelez-vous que c'est seulement applicable aux objets pas aux types prémitifs.

0voto

Stephen Murby Points 348

Tout objet en C# possède une méthode ToString(), même si je ne vois pas pourquoi on voudrait convertir une chaîne en une chaîne pour le moment. ToString() est hérité du type d'objet, dont une chaîne est bien sûr un exemple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X