编译时的不同:
重写:
父类有方法Identity(),并且必须使用virtual或abstract修饰(abstract修饰的话,该类也必须用abstract修饰),则子类可以用override进行重写。
隐藏方法:
与重写方法不同,父类方法不能用abstract修饰,可以用virtual或者不做申明。子类用new关键字声明此方法的隐藏。
运行时的不同:
测试代码如下
class Program
{
static void Main(string[] args)
{
Father a = new Father();
Child b = new Child();
a.Identity();
b.Identity();
Father c = new Child();
c.Identity();
Console.ReadKey();
}
}
class Father
{
public int a = 5;
public virtual void Identity()
{
a = 10;
Console.WriteLine("我是父类"+a);
}
}
class Child : Father
{
public new void Identity()
{
//base.Identity();
Console.WriteLine("我是子类"+a);
}
}运行结果证明:重写: 调用方法会根据引用指向的实际对象进行调用。隐藏方法会根据引用进行调用。同时重写的方法如果想先运行父类的方法再运行子类的方法的话可以通过base点出父类的方法。
本文通过示例代码详细介绍了C#中方法重写(override)与方法隐藏(new)的区别。编译时,重写要求父类方法用virtual或abstract修饰,而隐藏方法不需要。运行时,重写依据实际对象类型调用方法,隐藏则依据引用类型调用。
1400

被折叠的 条评论
为什么被折叠?



