0

Object 类的方法如何ToString能够发现对象的类型?

4

4 回答 4

4

默认实现Object.ToString是使用Object.GetType方法,其实现依赖于 CLR。

于 2012-09-18T06:18:33.127 回答
2
Debug.WriteLine(this.GetType().FullName);

来自微软的源代码:

// Returns a String which represents the object instance.  The default 
// for an object is to return the fully qualified name of the class. 
//
public virtual String ToString() 
{
    return GetType().ToString();
}

GetType().ToString()基本上返回类型的'Name',也就是“全名”或者完全限定名,比如System.Object. 请注意,名称包括命名空间。

于 2012-09-18T06:22:23.897 回答
1

对象的ToString()方法实际上是设置对象如何被表示为字符串,因此如果它在任何类中实现,则该类的实例将显示为其在该方法中的集合。

看看文档中的这个例子:

using System;

public class Object2
{
   private object value;

   public Object2(object value)
   {
      this.value = value;
   }

   public override string ToString()
   {
      return base.ToString() + ": " + value.ToString();
   }
}

public class Example
{
   public static void Main()
   {
      Object2 obj2 = new Object2('a');
      Console.WriteLine(obj2.ToString());
   }
}
// The example displays the following output: 
//       Object2: a

如果 Methode 在子类中实现,它将在此类中被调用并运行 ToString() 的类特定实现,确定可以在其中调用它的类类型,例如通过GetTypetypeof

于 2012-09-18T06:27:20.913 回答
0

ToString()类通过覆盖基类方法提供自己的实现。这就是您如何看待该方法的特定实现。

您可能会看到:如何:重写 ToString 方法(C# 编程指南)

来自上述链接的示例:

class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }

        public override string ToString()
        {
            return "Person: " + Name + " " + Age;
        }
    }

要使用它:

Person person = new Person { Name = "John", Age = 12 };
Console.WriteLine(person);
// Output:
// Person: John 12

在上面的示例中,您有一个类Person是基类的重写ToString方法object。现在,当您调用person.ToString()它时,它会调用您的ToString方法的实现,因为您已经覆盖了现有的实现。

于 2012-09-18T06:15:28.607 回答