基础才是重中之重~方法override详解
之所以写这篇文章,完全是因为这次代码审核,这次代码审核过程当中,出现了很多我认为基础知识不够扎实的问题,所以,打算把它们记录下来,共大家分享。
方法的override,即方法的覆写或者重写,有时还是习惯叫它英文override,它是指将父类的abstract或者virtual方法进行重新设计,可以将新的功能加入其中,看起来很不错,但在使用过程中,有时我们可能拿不准它,下面我说几点:
一 父类是抽象类,这时,它的实例化需要通过子类来完成,这时的override是子类最后重写的
二 父类是普通类,这时,它的实例化工作如果由自己完成,结果就是父类virtual的结果,与它的子类无关。
三 父类是普通类,它的实例化工作如果由子类完成,那么,它的结果就是子类方法override的结果
OK,下面我们来说一下例子,它由father类和sons类组成,father类是一个普通类,在这实现当中,它很可能是个泛型类,如仓储模式的实现
/// <summary> /// 一个爸爸 /// </summary> class Father { public virtual void print() { Console.WriteLine("我是爸爸"); } }
下面是儿子A对爸爸的print方法的重写工作
/// <summary> /// 一个儿子A /// </summary> class SonA : Father { public override void print() { Console.WriteLine("我是儿子");//override father class print method. } public void sonPrint() { base.print(); //我是爸爸 print();//我是儿子 } }
而下面是对print方法的各种调用工作,包括了实现化的方式
static void Main(string[] args) { SonA son = new SonA(); son.sonPrint(); //我是爸爸,我是儿子 Father father = new Father(); father.print();//我是爸爸 Father son2 = new SonA(); son2.print();//儿是儿子 }
OK,通过结果我们可以看出:
在儿子类里,base.print()方法走的是爸爸的print;print走的是儿子
在儿子类以外,使用爸爸自己去实例化后,print走的是爸爸的;使用儿子进行实例化后,print方法走的是儿子重写后的;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2012-11-09 爱上MVC3系列~分部视图中的POST