一段代码:
using System;
namespace MyNameSpace
{
  public class Person
  {
    public virtual void Print()
    {
      Console.WriteLine(base.ToString());
      Console.WriteLine(this.ToString());
    }
  }
  public class Student : Person
  {
    public override void Print()
    {
      base.Print();
    }
  }
  public class MyClass
  {
    public static void Main()
    {
      Person p = new Person();
      p.Print();
      Student s = new Student();
      s.Print();
      Console.ReadKey();
    }
  }
}
有关base和this两个不清楚,这个输出啥,为啥这样输出啊???请指教……

解决方案 »

  1.   

    base 指示 调用父类方法
    this 表示 调用本类方法
      

  2.   

    base  父类 相当于java中的super
    this  本类指针
      

  3.   

    输出结果是:
    MyNameSpace.Person
    MyNameSpace.Person
    MyNameSpace.Student
    MyNameSpace.Student在Main方法中s.Print()为什么不输出     MyNameSpace.Person     呢?
      

  4.   

    因为在Student 中对方法进行了override ,所以Student 里调用的时候只会输出Student 的字符串表示.
      

  5.   

    还是不太明白,能不能说详细点?
    我以为
    Student类继承了Person,重写了Print方法,但base.Print()应该是使用Person类中的Print()方法,所以要输出MyNameSpace.Person。
    呵呵,跟一绕口令似的。
    在Person类中如果修改代码
    Console.WriteLine(base.ToString());
    Console.WriteLine(this.ToString());
    使之成为
    Console.WriteLine("Person");
    那么就会输出两个“Person”的。
      

  6.   

    print 虽然是重载了,但tostring没有重载,意思就是,person类里并没有tostring方法,那么base.tostring()调用的还是object的tostring方法,所以输出结果没变,用下面的代码试试看,你就会明白了,ps:person的父类是object
    namespace consolepro
    {    public class Person
        {
            public virtual void Print()
            {
                Console.WriteLine(base.ToString());
                Console.WriteLine(this.ToString());
            }
            public override string ToString()
            {
                return "person.tostring.";
            }
        }
        public class Student : Person
        {
            public override void  Print()
            {
                Console.WriteLine(base.ToString());
                Console.WriteLine(this.ToString());
            }        public override string ToString()
            {
                return "student.tostring.";
            }
        }
        public class MyClass
        {
            public static void Main()
            {
                Person p = new Person();
                p.Print();
                Student s = new Student();
                s.Print();
                Console.ReadKey();
            }
        }}