ToString()方法有什么意义?

时间:2013-08-07 16:14:23

标签: c# .net

有人可以帮我解释一下,这是怎么回事?

如果不创建实际方法,如何从ToString()返回任何内容?

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**
        }
    }
}

3 个答案:

答案 0 :(得分:11)

C#中的所有类和结构都隐式地从System.Object派生。您正在覆盖Object.ToString

在C#中,当你写:

class Person
{

它实际上与编写

相同
class Person : System.Object
{
  

如何在不创建实际方法的情况下从ToString()返回任何内容?

如果您不覆盖ToString,则会获得System.Object.ToString()提供的默认实施。

隐式基类System.Object记录在C#语言规范的4.2.2中:

  

对象类类型是所有其他类型的最终基类。 C#中的每个类型都直接或间接地从对象类类型派生。

     

关键字对象只是预定义类System.Object的别名。

请注意,它与自定义struct略有不同,因为值类型派生自System.ValueType,但System.Object仍然是继承层次结构的一部分。

这在C#语言规范的4.1.1中有记载:

  

所有值类型都隐式继承自System.ValueType类,而System.ValueType又继承自类对象。任何类型都不可能从值类型派生,因此值类型被隐式密封(第10.1.1.2节)。

     

请注意,System.ValueType本身不是值类型。相反,它是一个类类型,从中可以自动派生所有值类型。

答案 1 :(得分:4)

  

如何在不创建实际方法的情况下,甚至可以从ToString()返回任何内容

Object.ToString()的默认实现只是:

return GetType().ToString();

这将返回该类型的(非限定)名称。如果您没有在Person课程上覆盖它,那么它将返回"Person"

子类可以自由地重写此方法以返回更有用的字符串,该字符串可能包含某些对象的状态,甚至是对象的人性化表示。 (DateTime例如这样做。)

答案 2 :(得分:1)

public override string正在创建一个方法,它恰好已经存在,因此override关键字用于表示您正在重新定义父类(System.Object)中的方法。

此处有更多信息:http://msdn.microsoft.com/en-us/library/system.object.aspx

  

因为.NET Framework中的所有类都派生自Object,   Object类中定义的每个方法都可用于所有对象   在系统中。派生类可以并且确实覆盖其中的一些   方法,包括:

     
      
  • 等于 - 支持对象之间的比较。

  •   
  • Finalize - 在自动回收对象之前执行清理操作。

  •   
  • GetHashCode - 生成与对象值对应的数字,以支持使用哈希表。

  •   
  • ToString - 制作描述该类实例的人类可读文本字符串。
  •