C#中子类对父类中虚方法的处理有重写(override)和覆盖(new),他们有什么区别?
2016-03-31 09:50
651 查看
在子类中用override重写父类中用virtual申明的虚方法时,实例化父类调用该方法,执行时调用的是子类中重写的方法;
如果子类中用new覆盖父类中用virtual申明的虚方法时,实例化父类调用该方法,执行时调用的是父类中的虚方法;
示例代码:
执行调用:
结果:
子类1的方法...
父类的方法...
如果子类中用new覆盖父类中用virtual申明的虚方法时,实例化父类调用该方法,执行时调用的是父类中的虚方法;
示例代码:
/// <summary> /// 父类 /// </summary> public class ParentClass { public virtual void ParVirMethod() { Console.WriteLine("父类的方法..."); } } /// <summary> /// 子类1 /// </summary> public class ChildClass1 : ParentClass { public override void ParVirMethod() { Console.WriteLine("子类1的方法..."); } } /// <summary> /// 子类2 /// </summary> public class ChildClass2 : ParentClass { public new void ParVirMethod() { Console.WriteLine("子类2的方法..."); } public void Test() { Console.WriteLine("子类2的其他方法..."); } }
执行调用:
ParentClass par = new ChildClass1(); par.ParVirMethod(); //结果:“子类1的方法”,调用子类的方法,实现了多态 par = new ChildClass2(); par.ParVirMethod();//结果:“父类的方法”,调用父类的方法,没有实现多态
结果:
子类1的方法...
父类的方法...
相关文章推荐
- 我的第一个c#文件HelloWould
- C# 多线程 Invoke BeginInvoke
- C#扫盲之:带你掌握C#的扩展方法、以及探讨扩展方法的本质、注意事项
- C# Readis log4net
- 【C#进阶系列】19 可空值类型
- 【C#进阶系列】19 可空值类型
- C#MyAccounting )课本P229~237页,还未完成
- C# 反射实例获取类属性
- 2016-3-30--C# 迭代器
- C# kinect v2学习笔记(四) 深度图像
- C# 文件更改扩展名
- C#多线程
- c# label的内容显示不全
- C#里的进制与ASCII转换
- C# 按指定(字节)长度截取字符串
- 在Excel表里面插入背景图
- c#学习之四:编写单例的两种形式
- C#中的分层开发
- 把Java项目的代码转换为C#代码
- c# 加密解密帮助类