2013-08-07 2 views
2

Quelqu'un pourrait expliquer s'il vous plaît pour moi, comment cela fonctionne même ??Quelle est la signification de la méthode ToString()?

Comment est-il possible de renvoyer quoi que ce soit sur ToString(), sans créer de méthode réelle?

using System; 

namespace ConsoleApplication4 
{ 
    class Person 
    { 

     private string name; 
     private int age; 

     public string Name 
     { 
      get { return name; } 
      set { name = value; } 
     } 
     public int Age 
     { 
      get { return age; } 
      set { age = value; } 
     } 
     **/* 
     * What is ToString() method? 
     * What I am overriding Here? 
     */** 
     public override string ToString() 
     { 
      return "Name= " + Name + " Age=" + Age; 
     }   
    } 
    class Sample 
    { 
     static void Main(string[] args) 
     { 
      Person P1 = new Person(); 
      P1.Name = "ABC"; 
      P1.Age = 21; 
      Console.WriteLine(P1.ToString()); 
      Console.ReadLine(); 

      **//Ouput Name = ABC Age = 23** 
     } 
    } 
} 

Répondre

11

Toutes les classes et structs en C# dérivent implicitement de System.Object. Vous surchargez Object.ToString.

En C#, lorsque vous écrivez:

class Person 
{ 

Il est effectivement la même que l'écriture

class Person : System.Object 
{ 

Comment est-il possible de retourner quoi que ce soit sur ToString(), sans créer méthode actuelle?

Si vous ne remplacez ToString, vous aurez l'implémentation par défaut fournie par System.Object.ToString().

La classe de base implicite étant System.Object est documentée dans 4.2.2 de la spécification du langage C#:

Le type de classe d'objets est la classe ultime de base de tous les autres types. Chaque type en C# dérive directement ou indirectement du type de classe d'objet.

Le mot-clé object est simplement un alias pour la classe prédéfinie System.Object.

Notez qu'il est un peu différent avec une coutume struct, puisque les types de valeurs dérivent de System.ValueType, mais System.Object fait toujours partie de la hiérarchie d'héritage.

Ceci est documenté dans 4.1.1 de la spécification du langage C#:

Tous les types de valeurs héritent implicitement de la System.ValueType de classe, qui, à son tour, hérite de l'objet de classe. Un type de valeur ne peut dériver d'aucun type et les types de valeur sont donc implicitement scellés (§10.1.1.2).

Notez que System.ValueType n'est pas lui-même un type de valeur. Il s'agit plutôt d'un type de classe à partir duquel tous les types de valeur sont automatiquement dérivés.

4

comment est-il même possible de retourner quoi que ce soit sur ToString(), sans créer une véritable méthode

L'implémentation par défaut de Object.ToString() est simplement:

return GetType().ToString(); 

Ce rendement le nom (non qualifié) du type. Si vous ne l'aviez pas écrasé sur votre classe Person, alors il aurait retourné "Person".

Les sous-classes sont libres de remplacer cette méthode pour renvoyer une chaîne plus utile, qui peut inclure une partie de l'état de l'objet, ou même une représentation conviviale de l'objet. (DateTime fait cela, par exemple.)

1

public override string crée une méthode, il se trouve déjà exister, donc le mot-clé override est utilisé pour indiquer que vous redéfinissez une méthode dans la classe parente (System.Object).

Plus d'infos ici: http://msdn.microsoft.com/en-us/library/system.object.aspx

Parce que toutes les classes du .NET Framework sont dérivées de l'objet, chaque méthode définie dans la classe d'objets est disponible dans tous les objets dans le système. Les classes dérivées peuvent et ne remplacent certaines de ces méthodes , y compris:

  • Égale - Prise en charge des comparaisons entre les objets. Finaliser - Effectue des opérations de nettoyage avant qu'un objet soit automatiquement récupéré. GetHashCode - Génère un nombre correspondant à la valeur de l'objet pour prendre en charge l'utilisation d'une table de hachage.

  • ToString - Crée une chaîne de texte lisible par l'utilisateur qui décrit une instance de la classe.
Questions connexes