博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何理解C# 多态中的override和new
阅读量:4470 次
发布时间:2019-06-08

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

如何理解C#中的override和new,看了很多博客和文章,从中收获了不少关于继承和多态的知识。但是理解层面还不够深入,不入本质。

但是,对象以及继承和多态,往往都是和现实世界类比而成的。它们源于现实世界,而高于之。我们何尝不从现实世界入手,对其实现机制进行类比。用我们比较熟悉的方式去理解呢?

见如下代码:

1 namespace ClassLibrary1 2 { 3    public class Teacher 4     { 5         public virtual void Paper() 6         { 7             Console.Write("老师出试卷"); 8         } 9     }10    public class S1 : Teacher11     {12         public override void Paper()13         {14             Console.WriteLine("S1做试卷");15         }16     }17    public class S2 : S118     {19         public override void Paper()20         {21             Console.WriteLine("S2重写了S1的试卷");22         }23     }24    public class S3 : S225     {26         public new void Paper()27         {28             Console.WriteLine("S3并没有重写S2的试卷,而是自己重新new了试卷");29         }30     }31 }32 33 namespace ConsoleApplication134 {35     class Program36     {37         static void Main(string[] args)38         {39 40             Teacher t = new Teacher();41             t.Paper();      //老师出试卷42             S1 s1 = new S1();43             s1.Paper();    //S1做试卷44             S2 s2 = new S2();45             s2.Paper();    //S2重写了S1的试卷46             S3 s3 = new S3();47             s3.Paper();    //S3并没有重写S2的试卷,而是自己重新new了试卷48 49             t = s3;50             t.Paper();//!!S2重写了S1的试卷51 52             t = s2;53             t.Paper();//S2重写了S1的试卷54 55             t = s1;56             t.Paper();//S1做试卷57 58 59         }60     }61 }

2013-01-05

分析:为什么t=s3,t.Paper()显示结果是S2重写了S1的试卷呢?因为这个引用t是Teacher类的,所以先从Teacher类找到Paper()这个方法,然后发现被重写,所以又找到S1的Paper(),然后发现其又被重写,所以,继续往下走,找到了S2的Paper()。到此处,发现Paper()没有被重新,所以停止。所以使用override会找到被重写的最远的一个方法。通俗讲:老师出了出卷,同学A做了,然后同学B在A的基础上又做了修改...同学n在n-1的基础上又做了修改。所以最后的试卷肯定是第n个童鞋的结果哦。但是new方法只是重新又写了自己的试卷而已。只有通过S3 s3=new S3(),s3.Paper().才能看到自己做的结果。即通过自己的引用处理自己的对象。

 

转载于:https://www.cnblogs.com/zzPrince/archive/2013/01/05/2845523.html

你可能感兴趣的文章
MySql可视化工具MySQL Workbench使用教程
查看>>
个人站立会议第二阶段07
查看>>
云时代架构阅读笔记五——Web应用安全
查看>>
IOS 单击手势和cell点击冲突
查看>>
学习_HTML5_day3
查看>>
计算机网络与应用第二次笔记
查看>>
Django之ORM查询
查看>>
学习python第七天
查看>>
Flask基础(07)-->正则自定义转换器
查看>>
网站架构模式(二)
查看>>
【数据结构】算法 LinkList (Add Two Numbers)
查看>>
Bugtags:移动时代首选 Bug 管理系统
查看>>
hibernate学习笔记之一 hibernate简介
查看>>
定时任务quartz
查看>>
Set集合和实现类
查看>>
Ubuntu 12.04安装vim和配置
查看>>
centos配置jdk
查看>>
我在清华当工程师的日子
查看>>
mysql基础
查看>>
编程如写作
查看>>