不运行程序,你知道结果是什么样的吗?
运行完了,看到结果,你知道为什么吗?
知道的话请给我解释一下,实在想不通!!!!!!!!!!!
复制内容到剪贴板代码:
using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            Program obj = new Program();
            Object o = obj;
            System.Console.WriteLine(obj);
            System.Console.WriteLine(o);
            System.Console.WriteLine(obj.ToString());
            System.Console.WriteLine(o.ToString());
        }
        public new string ToString()
        {
            return "hello";
        }
    }
}这是我自己测试的结果
正确的运行结果:
ConsoleApplication.Program
ConsoleApplication.Program
hello
ConsoleApplication.Program

解决方案 »

  1.   

    不看答案我也不知道它输入啥玩意,除了helllo,
    呵呵,学习,支持楼主
      

  2.   

     System.Console.WriteLine方法的说明:如果 value 为空引用(在 Visual Basic 中为 Nothing),则只写入行结束符。否则,value 的 ToString 方法被调用以生成其字符串表示,所得的字符串被写入标准输出流。
    原因很简单public new string ToString() 
    代表了ToString不是从object过来的方法
    System.Console.WriteLine(obj); //调用object的tostring显示
    System.Console.WriteLine(o); //调用object的tostring显示
    System.Console.WriteLine(obj.ToString()); //调用ConsoleApplication.Program 的tostring显示,此出很明确地知道obj是ConsoleApplication.Program类型,实际地调用
    System.Console.WriteLine(o.ToString());//调用object的tostring显示,这里并不知道o是ConsoleApplication.Program 类型,虚调用
     
      

  3.   

    public new string ToString() 
    会误导群众的,一般人是不会注意这个new的
      

  4.   

    System.Console.WriteLine(obj);// obj的类型是ConsoleApplication.Program 
    System.Console.WriteLine(o); //o的类型是object{ConsoleApplication.Program} 
    System.Console.WriteLine(obj.ToString()); //对ToString()重写了,如果不重写结果还是输出数据类型
    System.Console.WriteLine(o.ToString());  //ToString()重写对类外的不影响