基础知识系列☞关键字→virtual
看到自己以前的一篇博客,感觉还差点什么,√,代码...
using System; namespace Test { public class Program { private static void Main(string[] args) { //调用... Dog dog = new Dog(); dog.VirtualMethod(); dog.NoVirtualMethod(); Console.Read(); } } #region 测试代码 /// <summary> /// 基类:动物 /// </summary> public class Animals { public virtual void VirtualMethod() { Console.WriteLine("父类→标记'virtual'的方法→VirtualMethod"); } public void NoVirtualMethod() { Console.WriteLine("父类→未标记'virtual'的方法→NoVirtualMethod"); } } /// <summary> /// 子类:汪星人 /// </summary> public class Dog : Animals { public override void VirtualMethod() { Console.WriteLine("子类→重写方法→VirtualMethod"); } /* /// <summary> /// 错误 CS0506 “Dog.NoVirtualMethod()”: 继承成员“Animals.NoVirtualMethod()”未标记为 virtual、abstract 或 override,无法进行重写 /// </summary> public override void NoVirtualMethod() { Console.WriteLine("子类→重写方法→NoVirtualMethod"); base.NoVirtualMethod(); } */ /// <summary> /// 警告 CS0108 “Dog.NoVirtualMethod()”隐藏继承的成员“Animals.NoVirtualMethod()”。如果是有意隐藏,请使用关键字 new。 /// </summary> public void NoVirtualMethod() { base.NoVirtualMethod();//base访问父类...扩展一下... Console.WriteLine("子类→未重写方法→NoVirtualMethod"); } //new public void NoVirtualMethod() //{ // Console.WriteLine("子类→new方法→NoVirtualMethod"); //} } #endregion }
上面代码结果:
由此可以看出↓
当基类[Animals]的方法[NoVirtualMethod]未标记为[virtual]的时候,
子类[Dog]中是没有办法[override]重写的...
提示:“Dog.NoVirtualMethod()”: 继承成员“Animals.NoVirtualMethod()”未标记为 virtual、abstract 或 override,无法进行重写
从智能提示中也可以看出来↓,没有提示[NoVirtualMethod]可以进行重写...
如上面代码那样[强行](已经出现警告了)在子类中写一个和父类同名的方法,调用的时候还是会显示使用子类的方法...
我理解的就是:子类和父类中的方法同名了,子类隐藏了父类的方法,推荐写法就是使用new
new public void NoVirtualMethod() { Console.WriteLine("子类→new方法→NoVirtualMethod"); }
xxx
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2016-03-01 转>>在同一个sql语句中如何写不同条件的count数量