Pourquoi le type de données string a un .ToString()
méthode ?
Cela m'a surpris :), je pensais juste que C# est comme Java, il n'y a pas de méthode toString pour ces choses :)
Pourquoi le type de données string a un .ToString()
méthode ?
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;
}
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);
Cela m'a surpris :), je pensais juste que C# est comme Java, il n'y a pas de méthode toString pour ces choses :)
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.
Non, la chaîne n'est jamais mise en boîte pour devenir un objet. stackoverflow.com/questions/215255/string-vs-string-in-c
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.
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.