using System;
//C#中new和override的区别
namespace Text
{//在C#中,override和new都会覆盖父类中的方法。那它们两者之前有什么区别呢?//override是指“覆盖”,是指子类覆盖了父类的方法。子类的对象无法再访问父类中的该方法。 //new是指“隐藏”,是指子类隐藏了父类的方法,当然,通过一定的转换,可以在子类的对象中访问父类的方法。class Base{public virtual void F1(){Console.WriteLine("Base's virtual function F1");}public virtual void F2(){Console.WriteLine("Base's virtual fucntion F2");}}class Derived : Base{public override void F1(){Console.WriteLine("Derived's override function F1");}public new void F2(){Console.WriteLine("Derived's new function F2");}}class EXE1{public static void Fun(){Base b1 = new Derived();//由于子类覆盖了父类的方法,因此这里调用的是子类的F1方法。也是OO中多态的体现
            b1.F1();//由于在子类中用new隐藏了父类的方法,因此这里是调用了隐藏的父类方法
            b1.F2();}}//或者我们用以下的代码更加容易明白:   class EXE2{public static void Fun(){Derived b1 = new Derived();//由于子类覆盖了父类的方法,因此这里调用的是子类的F1方法。也是OO中多态的体现
            ((Base)b1).F1();//由于在子类中用new隐藏了父类的方法,因此这里是调用了隐藏的父类方法
            ((Base)b1).F2();}}//以上两个的输出都为: //Derived's override function F1 //Base's virtual fucntion F2   //在上面的例子中,由于F1覆盖(override)了原先的方法,//因此即使转成父类的对象,仍旧调用了子类的F1方法。//而由于子类的F2方法只是“隐藏”了父类的F2方法,//因此当强制转换成父类(Base)的对象去调用F2方法时,//调用了原先隐藏的父类的F2方法。
}

转载于:https://www.cnblogs.com/Sky-cloudless/archive/2012/07/05/2577472.html

C#中new和override的区别相关推荐

  1. java中overload与override的区别

    1.综述  重写(Override)也称覆盖,它是父类与子类之间多态性的一种表现,而重载(Overload)是一个类中多态性的一种表现. override从字面就可以知道,它是覆盖了一个方法并且对其重 ...

  2. fileoutputstream路径 android,Android编程中FileOutputStream与openFileOutput()的区别分析

    本文实例分析了Android编程中FileOutputStream与openFileOutput()的区别.分享给大家供大家参考,具体如下: openFileOutput() 首先给大家介绍使用文件如 ...

  3. android MotionEvent中getX()和getRawX()的区别

    今天,讲讲触摸时间里  getX()和getRawX()的区别. 如上图所示: getRowX:触摸点相对于屏幕的坐标 getX: 触摸点相对于按钮的坐标 getTop: 按钮左上角相对于父vie ...

  4. C++中重载与重写函数区别及虚函数(转载)

    C++中重载与重写函数区别及虚函数 C++中的虚函数(virtual function) 1.简介 虚函数是C++中用于实现多态(polymorphism)的机制.核心理念就是通过基类访问派生类定义的 ...

  5. Java中重载和复写的区别

    Java中重载和复写的区别 重载(overload) 复写(override) 区别和联系 重载(overload) 函数重载的最突出的例子就是类的构造函数,用户定义一个对象时可能会提供多种参数组合: ...

  6. 类的 三大特性 封装,继承,多态 overload与override的区别

    OOP三大特性:封装,继承,多态 封装的目的:为了让类更安全 封装的做法: 1.类里面的成员变量做为private 2.使用成员方法来间接访问成员变量 3.在该方法里面加限制条件 php类里面不允许出 ...

  7. C#中Abstract和Virtual的区别

    转自原文 C#中Abstract和Virtual的区别 c# 中 Abstract和Virtual比较容易混淆,都与继承有关,并且涉及override的使用.下面讨论一下二者的区别: 一.Virtua ...

  8. C#中抽象类和接口的区别与应用场景

    一直对这两个基础概念没有很好的认识,在网上发现一个我能够理解的基础概念理解,存一下,反复看. C#中抽象类和接口的区别与应用场景一. 1.抽象类:抽象类是特殊的类,只是不能被实例化;和普通类一样里面什 ...

  9. Overload和Override的区别说明

    下文笔者讲述Overload和Override的区别简介说明,如下所示: Overload:重载Override:覆盖(重写)------------------------------------- ...

最新文章

  1. Cocoon的sitemap详解
  2. shell 数组里追加数值_shell编程之数组及变量的多功能用法
  3. Redis链表结构深入
  4. python字符串前面加u,r,b的含义
  5. 计算机科学 —— 时间戳(timestamp)
  6. 外网不能访问图片的问题
  7. 莞工计算机学院杀手,莞工oj第40题神奇的fans
  8. Go语言之高级篇beego框架之模型(Models)
  9. PHP 大地坐标系转高德经纬度
  10. Android WebView下载使用教程
  11. 我身边那些资深程序员,他们是怎么突破年薪百万的?
  12. Hopping Rabbit---牛客
  13. Devise邮件模板路径
  14. Springboot 热部署----热部署插件的使用
  15. 元数据管理平台技术白皮书
  16. JavaScript面试题111-120
  17. sketch如何做设计稿交互_用 Sketch 绘制一份美观的交互稿
  18. 博物馆场馆智能化展览展示解决方案
  19. linux 内核修改rss,什么是Linux内存管理中的RSS和VSZ
  20. WPF 实现柱形统计图

热门文章

  1. build 之前执行task_Android Gradle新增buildtypes以及编译前执行自定义task
  2. linux应用系统使用率,Linux性能优化实战:系统CPU使用率高,但为啥找不到高的应用(06)...
  3. cascader 动态加载 回显_Elementui cascader 级联选择器 动态加载数据,保存后回显的问题...
  4. python字符串转日期_Python:将字符串时间字典转换为日期时间
  5. jieba 分词的三种模式
  6. js时间工具 MyTimeUtil.js
  7. JDBC连接池JDBCTemplate课堂笔记
  8. Nginx深入详解之模块化体系结构
  9. 百度提前批-百度智能小程序(面经详解)
  10. 协同过滤——基于邻域的算法