此文为转载,很清楚地代码,最后总结的很好,恩
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
baseClass bc;
class1 ct1 = new class1();
class2 ct2 = new class2();
ct1.prinf();
bc = ct1;
bc.prinf();
Console.WriteLine("---------------------");
ct2.prinf();
bc = ct2;
bc.prinf();
}
}
public class baseClass
{
private int index = 0;
public virtual void prinf()
{
Console.WriteLine("这是基类虚方法" + index.ToString());
}
}
public class class1 : baseClass
{
private int index = 1;
public override void prinf()
{
Console.WriteLine("这是子类新的方法" + index.ToString());
}
}
public class class2 : baseClass
{
private int index = 2;
public new void prinf()
{
Console.WriteLine("这是子类新的方法" + index.ToString());
}
}
}
运行结果: 这是子类新的方法1 这是子类新的方法1 --------------------- 这是子类新的方法2 这是基类虚方法0 如上 使用override重写printf方法,通过父类引用一样只能看到重写后的方法; 如果使用new隐藏printf方法,父类子类引用各自对应方法; override重写虚方法,那么就只剩下重写以后的方法; new隐藏基类的方法,那么基类的方法和当前类的方法同时存在只是被隐藏了;