Je suis étudiant en c# et je me demande ce que le point et avantages de la substitution de `` peut être, comme illustré dans l’exemple ci-dessous.
Pourrait-ce possible d’une manière plus simple, à l’aide d’une méthode commune sans le secours ?
Je suis étudiant en c# et je me demande ce que le point et avantages de la substitution de `` peut être, comme illustré dans l’exemple ci-dessous.
Pourrait-ce possible d’une manière plus simple, à l’aide d’une méthode commune sans le secours ?
Je vais juste vous donner la réponse directement à partir de la Conception du Cadre des lignes Directrices de l' .NET Développement de la Série.
ÉVITER de jeter des exceptions ToString
ENVISAGER le retour d'une unique chaîne de caractères associée à l'instance.
ENVISAGER d' avoir la sortie de l' ToString
être une entrée valide pour toute l'analyse des méthodes de ce type.
FAIRE en sorte que ToString
a n'observe pas d'effets secondaires.
FAIRE rapport à la sécurité des informations sensibles par le biais d'une substitution de ToString
seulement après avoir demandé une autorisation appropriée. Si la demande d'autorisation échoue, renvoyer une chaîne de caractères à l'exclusion de la sécurité des informations sensibles.
L' Object.ToString
méthode est destinée à être utilisée pour l'affichage général et à des fins de débogage. L'implémentation par défaut fournit simplement le type d'objet nom. L'implémentation par défaut n'est pas très utile, et il est recommandé que la méthode soit remplacée.
FAIRE remplacer ToString
chaque fois qu'un intéressant lisible par l'homme de chaîne peuvent être retournés. L'implémentation par défaut n'est pas très utile, et une implémentation personnalisée peut presque toujours fournir plus de valeur.
NE préférez un nom convivial de plus de un unique, mais pas lisible ID.
Il est également intéressant de mentionner que Chris Vend aussi explique dans les lignes directrices qu' ToString
est souvent dangereux pour les interfaces utilisateur. Généralement ma règle d'or est d'exposer une propriété qui serait utilisé pour les informations de liaison de l'INTERFACE utilisateur, et de laisser l' ToString
remplacement pour l'affichage des informations de diagnostic pour le développeur. Vous pouvez également décorer votre type avec DebuggerDisplayAttribute
.
FAIRE essayez de garder la chaîne renvoyée par ToString
court. Le débogueur utilise ToString
pour obtenir une représentation textuelle d'un objet à être montré pour le développeur. Si la chaîne est plus longue que le débogueur permet d'afficher, de l'expérience de débogage est entravée.
FAIRE de la chaîne de mise en forme basée sur le thread en cours de culture lors du retour de la culture-dépendante de l'information.
NE fournir surcharge ToString(string format)
, ou de mettre en oeuvre IFormattable
, si la chaîne de retour d' ToString
est sensible à la culture, ou il existe différentes façons de mettre en forme la chaîne. Par exemple, DateTime
fournit la surcharge et implémente IFormattable
.
NE PAS renvoyer une chaîne vide ou null à partir de ToString
Je ne jure que par ces lignes directrices, et vous devriez. Je ne peux pas vous dire comment mon code s'est améliorée simplement en cela une ligne directrice pour l' ToString
. La même chose vaut pour des choses comme IEquatable(Of T)
et IComparable(Of T)
. Ces choses font de votre code, très fonctionnelle, et vous ne regretterez pas de prendre le temps nécessaire pour mettre en œuvre tout cela.
Personnellement, je n'ai jamais vraiment utilisé ToString
beaucoup pour les interfaces utilisateur, j'ai toujours exposés à une propriété ou méthode de tri. La majorité du temps, vous devez utiliser ToString
pour le débogage et le développeur fins. L'utiliser pour afficher des informations importantes de diagnostic.
Avez-vous besoin de remplacer ToString
? Pas de.
Pouvez-vous obtenir une représentation sous forme de chaîne de votre objet dans un autre chemin? Oui.
Mais en utilisant ToString
vous êtes en utilisant une méthode qui est commun à tous les objets et donc d'autres classes à savoir à propos de cette méthode. Par exemple, lors de l' .NET framework veut convertir un objet à une représentation de chaîne, ToString
est un candidat de choix (il y en a d'autres, si vous souhaitez fournir plus d'élaborer des options de mise en forme).
Concrètement,
Console.WriteLine(yourObject);
invoquer yourObject.ToString()
.
Primordial ToString()
vous permet de donner une lisible par les humains représentation sous forme de chaîne d'une classe.
Cela signifie que la sortie peut révéler des informations utiles à propos de votre classe. Par exemple, si vous avez eu une Personne de la classe, vous pouvez choisir d'avoir l' ToString()
sortie de la personne id, leur prénom, leur nom de famille, etc. Cela est extrêmement utile lors du débogage ou de l'exploitation forestière.
Quant à votre exemple -, il est difficile de dire si votre remplacement est utile sans savoir ce que cette classe est - mais la mise en œuvre elle-même est ok.
C'est toujours le cas, mais de considérer attentivement les intentions derrière ce que vous êtes en affichage
Une meilleure question serait de se demander:
Pourquoi aurait-on remplacer ToString()?
ToString() est la fenêtre dans l'état d'un objet. L'accent sur l' état comme une exigence. Vivement la programmation orientée objet, les langages comme Java/C# abus de la programmation orientée objet modèle en encapsulant le tout dans une classe. Imaginez que vous êtes le codage dans un langage qui ne respecte pas le fort de la programmation orientée objet de modèle; - prendre en compte si vous souhaitez utiliser une classe ou d'une fonction. Si vous voulez l'utiliser comme une fonction (c'est à dire le verbe, l'action) et l'état interne est maintenu seulement temporairement entre entrée/sortie, ToString() ne pas ajouter de la valeur.
Comme d'autres l'ont mentionné, il est important de considérer ce que vous sortie avec ToString (), car il pourrait être utilisé par le débogueur ou d'autres systèmes.
J'aime à imaginer la méthode ToString que le --help paramètre d'un objet. Il doit être court, lisible, évidente et facile à afficher. Il doit afficher ce que l'objet n'est pas ce qu'il fait. Avec tout ce que l'esprit nous allons étudier...
Cas d'utilisation - traitement d'un paquet TCP:
Pas au niveau de l'application seule capture réseau, mais quelque chose avec plus de viande comme un ppce de capture.
Vous souhaitez surcharge ToString() pour juste la couche TCP de sorte que vous pouvez imprimer les données de la console. Que serait-il? Vous pourriez devenir fou et analyser toutes les informations TCP (c'est à dire le protocole TCP est complexe)...
Qui comprend:
Mais voudriez-vous pour recevoir toutes les bric-à-brac si vous étiez en appelant le protocole TCP.ToString() sur 100 paquets? Bien sûr que non, ce serait la surcharge d'information. Le facile et le choix évident est également le plus sensible...
Exposer ce que les gens s'attendent à voir:
Je préfère un bon de sortie qui est facile pour l'homme d'analyser mais YMMV.
TCP:[destination:000, source:000]
Rien de très complexe, la sortie n'est pas pour les machines à analyser (c'est à dire moins que les gens abusent de votre code), l'objectif visé est à des fins de lisibilité.
Mais qu'en tout le reste de la juteuse info j'en ai parlé avant, n'est-ce pas utile de trop? J'y reviendrai mais d'abord...
ToString() l'un des plus précieux et les plus sous-utilisés, les méthodes de tous les temps
Pour deux raisons:
Raison 1 - Ne pas abuser de l'utilité de ToString():
Beaucoup de gens utiliser ToString() pour extraire une chaîne simple représentation d'un objet. Le C# manuel, même les états:
ToString est la principale méthode de formatage dans le .NET Framework. Il convertit un objet à sa représentation sous forme de chaîne de sorte qu'il est adapté pour l'affichage.
D'affichage, pas d'autre traitement. Cela ne signifie pas que, de prendre ma belle représentation de chaîne du paquet TCP ci-dessus et tirez sur le port de la source à l'aide d'une regex ::grimace::.
Le droit de la façon de faire les choses est, appel à ToString() directement sur le SourcePort propriété (qui d'AILLEUR est un ushort donc ToString() devrait déjà être disponible).
Si vous avez besoin de quelque chose de plus robuste de package de l'état d'un objet complexe pour la machine d'analyse, vous serez mieux à l'aide d'un structurés de sérialisation de la stratégie.
Heureusement, de telles stratégies sont très fréquents:
Remarque: si vous utilisez PHP parce que, de reptiles et d'amphibiens-derp, il y a une fonction pour ça ::rire::
Raison 2 - ToString() n'est pas assez:
Je n'ai pas encore de voir une langue qui la met en œuvre à la base, mais j'ai vu et utilisé des variantes de cette approche dans la nature.
Certains incluent:
Fondamentalement, ce qui poilue désordre d'un Paquet TCP état doit être décrit pour une meilleure lisibilité. Pour éviter de "battre un cheval mort" parler TCP je vais de "pointer du doigt" au #1 cas-là, je pense ToString() et ToVerboseString() sont sous-utilisés...
Cas D'Utilisation - Les Tableaux:
Si vous utilisez principalement un langage, vous êtes probablement à l'aise avec cette langue. Pour les gens comme moi qui sautent entre les différentes langues, le nombre de différentes approches peuvent être irritantes.
C'est à dire, le nombre de fois que cela a irrité moi est plus grand que la somme de tous les doigts de chaque dieu Hindou combiné.
Il y a différents cas où l'utilisation des langues communes hacks et un peu de qui obtenir ce droit. Certains exigent roue réinventant, certains font un peu cliché, d'autres en profondeur vidage, aucun d'entre eux fonctionnent de la façon dont je voudrais qu'ils...
Ce que je demande, c'est une approche très simple:
print(array.ToString());
Sorties: 'Tableau[x]" ou " Tableau[x][y]'
Où x est le nombre d'éléments dans la première dimension et y est le nombre d'éléments dans la deuxième dimension ou une autre valeur qui indique que la 2ème dimension est irréguliers (min/max de la gamme peut-être?).
Et:
print(array.ToVerboseString());
Les sorties de la totalité elle-bang dans pretty-print car j'apprécie les belles choses.
J'espère que cela jette un peu de lumière sur un sujet qui a irrité moi un long moment. Au moins, j'ai saupoudré un peu de troll-appât pour la PHPers à downvote cette réponse.
C'est sur les bonnes pratiques, plus que tout, vraiment.
ToString()
est utilisé dans de nombreux endroits pour retourner une chaîne de la représentation d'un objet, généralement à des fins de consommation par l'homme. Souvent la même chaîne peut être utilisée pour réhydrater l'objet ( int
ou DateTime
par exemple), mais ce n'est pas toujours une donnée (un arbre par exemple, peut avoir une durée de représentation de chaîne qui affiche simplement un nombre, mais il est clair que vous ne pouvez pas l'utiliser pour reconstruire).
En particulier, le débogueur s'utilisez cette option pour afficher la variable dans la fenêtre, immédiat, windows, etc, donc ToString
est réellement précieux pour le débogage.
En général, ce type ont souvent un membre explicite qui retourne une chaîne de caractères. Par exemple, un Lat/Long paire pourrait avoir ToDecimalDegrees
qui renvoie "-10, 50"
par exemple, mais il peut aussi avoir ToDegreesMinutesSeconds
, étant donné que c'est un autre format pour un Lat/Long de la paire. Le même type pourrait alors également remplacer ToString
avec un de ceux à fournir une valeur "par défaut" pour des choses comme le débogage, ou même potentiellement pour des choses comme le rendu des pages web (par exemple, l' @
de construire dans un Rasoir écrit l' ToString()
résultat d'une non-expression de chaîne pour le flux de sortie).
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.