C#中父类、子类方法 Virtual、Override、New关键字的区别
发布日期:2021-09-11 09:57:52 浏览次数:6 分类:技术文章

本文共 2840 字,大约阅读时间需要 9 分钟。

hot3.png

创建1个父类BaseClass,包含3个方法:VirtualPrint( )、OverridePrint( )、ShadowPrint( )

    public class BaseClass    {        public virtual void VirtualPrint()        {            Console.WriteLine("BaseClass : VirtualPrint");        }        public virtual void OverridePrint()        {            Console.WriteLine("BaseClass : OverridePrint");        }        public virtual void ShadowPrint()        {            Console.WriteLine("BaseClass : ShadowPrint");        }    }

创建1个子类DerivedClass,分别重写、投射父类方法:

    public class DerivedClass:BaseClass    {        public override void OverridePrint()        {            Console.WriteLine("DerivedClass : OverridePrint");        }        public new void ShadowPrint()        {            Console.WriteLine("DerivedClass : ShadowPrint");        }    }

在Program的Main函数中,分别创建父类、子类实例,并调用其全部方法:

            BaseClass bc = new BaseClass();            DerivedClass dc = new DerivedClass();            Console.WriteLine("VirtualPrint() Of Two Class :");            bc.VirtualPrint();            dc.VirtualPrint();            Console.WriteLine("OverridePrint() Of Two Class :");            bc.OverridePrint();            dc.OverridePrint();            Console.WriteLine("ShadowPrint() Of Two Class : ");            bc.ShadowPrint();            dc.ShadowPrint();            Console.WriteLine("-------------------------------");

显示效果如下:

142638_Xe5M_2260754.png

创建3个传入BaseClass类型变量的方法,用来显示区别:

        static void ShowVirtualPrintDiff(BaseClass b)        {            b.VirtualPrint();        }        static void ShowOverridePrintDiff(BaseClass b)        {            b.OverridePrint();        }        static void ShowShadowPrintDiff(BaseClass b)        {            b.ShadowPrint();        }

在Main函数中,调用上面的方法分别传入父类、子类实例:

            Console.WriteLine("ShowVirtualPrintDiff : ");            ShowVirtualPrintDiff(bc);            ShowVirtualPrintDiff(dc);            Console.WriteLine("ShowOverridePrintDiff : ");            ShowOverridePrintDiff(bc);            ShowOverridePrintDiff(dc);            Console.WriteLine("ShowShadowPrintDiff : ");            ShowShadowPrintDiff(bc);            ShowShadowPrintDiff(dc);            Console.WriteLine("-------------------------------");            Console.ReadLine();

显示效果如下:

142957_1Brn_2260754.png

可以看到,对于投射New 的子类方法,调用的仍然是父类的方法。重写Override则调用子类方法。

如果想在传入父类类型的方法中,仍然使用子类投射New的方法,可先判断传入的变量是否为子类类型,如是则调用子类方法:

        static void ShowShadowPrintDiffCorrect(BaseClass b)        {            if(b is DerivedClass)            {                (b as DerivedClass).ShadowPrint();            }            else            {                b.ShadowPrint();            }        }

回到Main函数中,调用2次,显示父类子类区别:

            Console.WriteLine("ShowShadowPrintDiffCorrect : ");            ShowShadowPrintDiffCorrect(bc);            ShowShadowPrintDiffCorrect(dc);

显示效果如下:

143358_O4pJ_2260754.png

语法基础还是要搞清楚,否则以后难免踩雷。。。

转载于:https://my.oschina.net/u/2260754/blog/638497

转载地址:https://blog.csdn.net/weixin_34409703/article/details/92187827 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:linux系统之日志文件系统详解
下一篇:vSphere中Storage vMotion的流程详解

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年03月29日 11时32分51秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

php 删除字节,php – 删除无效/不完整的多字节字符 2019-04-21
php 实现版本号对比,如何在PHP中实现比较版本号 2019-04-21
php sql 给数据库追加内容,php如何向数据库中的某串数据后追加内容【急】 2019-04-21
php微信小程序获取用户信息,微信小程序授权获取用户详细信息openid的实例详解... 2019-04-21
Java三元运算和if,Java三元运算符与<JDK8兼容性中的if / else 2019-04-21
graphql-php enum,php – 如何在不写长查询的情况下查询所有的GraphQL类型字段? 2019-04-21
php date 函数用法,php中date()日期时间函数使用方法 2019-04-21
php除法获取整数和余数,PHP除法取整和取余数 2019-04-21
java迷宫路径,Java中的迷宫路径查找器 2019-04-21
php substr cnblog,php中substr用法示例 2019-04-21
php链接怎么截取,PHP 截取网页中的固定种子链接 2019-04-21
iis运行不起来php报500,解决IIS上安装thinkphp6运行报500错误 2019-04-21
php ajax上传图片过大500错误,javascript – JQuery AJAX文件上传错误500 2019-04-21
matlab 图中的legend,matlab中legend加图示命令的使用 2019-04-21
PHP exec xargs 不执行,Linux中的xargs命令及示例 2019-04-21
php 枚举cookie内容,php设置和获取cookie 2019-04-21
单防区扩展模块怎么用_AB罗克韦尔自动化Micro800 扩展 I/O模块型号及功能介绍 2019-04-21
java矩阵类_Java泛型——泛型矩阵类 2019-04-21
java车牌正则表达式_车牌正则表达式 2019-04-21
wordpress4.9.4 mysql_WordPress 将不再支持 PHP4 和 MySQL 4 2019-04-21