http://www.cnblogs.com/notifier/archive/2010/05/14/1735235.html

1.  C#中方法覆盖时override和new的比较

C#中override关键字使用在虚函数(virtual method)和抽象函数(abstract method)的覆盖上;

C#中new关键字使用在派生类覆盖父类的"普通"函数上(也就是说非虚函数非抽象函数的情境下)

下面是代码示例:(override的用法见下面abstract和virtual比较的章节)

using System;using System.Collections.Generic;using System.Text;

namespace ConsoleApplication4{publicabstractclass Book    {publicvoid Introduce()        {            Console.WriteLine("I'm book");        }

publicvoid SayHi()        {            Console.WriteLine("Hi, I'm book");        }    }

publicclass JavaBook : Book    {// 显式加上new,跟不加new实际效果一样,只是加new之后会消除compile warningpublicnewvoid SayHi()        {            Console.WriteLine("Hi, I'm Java");        }    }

publicclass test    {public test()        {            JavaBook javaBook =new JavaBook();            Book book =new JavaBook();

            javaBook.Introduce();       //将调用JavaBook中Introduce()            javaBook.SayHi();           //将调用JavaBook中SayHi()

            book.Introduce();       //将调用Book中Introduce()            book.SayHi();           //将调用Book中SayHi()        }publicstaticvoid Main()        {            test t =new test();        }    }}


2.  C#中abstract和virtual的比较

abstract方法(抽象方法)和Java中的使用是一致的,至少我现在是这么理解.

virtual是C#中为了实现运行时多态而加的机制,上面有提到,子类可以覆盖父类的函数(使用override)从而实现多态.

这里岔个话题,笔记一下C#中多态的实现:C#中多态的实现分为了两种,一种是编译时多态,一种是运行时多态

|- 编译时多态  通过一个类中多个方法的重载来实现的多态,系统在编译的时候,根据传递的参数确定具体调用哪个重载的方法;

|- 运行时多态  通过virtual函数(虚函数)、抽象方法实现的多态,派生类去override虚函数或抽象方法,从而实现运行时多态.

具体实例代码如下:

第一段代码: abstract的用法

using System;using System.Collections.Generic;using System.Text;

namespace ConsoleApplication3{publicabstractclass Book    {//抽象方法,不含主体,抽象方法所在类必须为抽象类,派生类必须实现该方法publicabstractvoid Introduce();    }

publicclass JavaBook : Book    {//实现抽象方法,必须实现,注意!必须添加override关键字publicoverridevoid Introduce()        {            Console.WriteLine("I'm Java");        }    }

publicclass test    {public test()        {            JavaBook javaBook =new JavaBook();            javaBook.Introduce();      //将调用JavaBook中Introduce()            Book book =new JavaBook();            book.Introduce();      //将调用JavaBook中Introduce()        }publicstaticvoid Main()        {            test t =new test();        }    }}

第二段代码: virtual的用法以及override的用法

using System;using System.Collections.Generic;using System.Text;

namespace ConsoleApplication2{publicabstractclass Book    {publicvirtualvoid Introduce()        {            Console.WriteLine("I'm book");        }

publicvirtualvoid SayHi()        {            Console.WriteLine("Hi, I'm book");        }    }

publicclass JavaBook : Book    {publicoverridevoid Introduce()        {            Console.WriteLine("I'm Java");        }

//注意,此方法没有override父类的方法publicvoid SayHi()        {            Console.WriteLine("Hi, I'm Java");        }    }

publicclass test    {public test()        {            JavaBook javaBook =new JavaBook();            Book book =new JavaBook();            javaBook.Introduce();       //将调用JavaBook中Introduce()            book.Introduce();       //将调用JavaBook中Introduce()

            javaBook.SayHi();      //将调用JavaBook中SayHi()            book.SayHi();           //将调用Book中SayHi()        }

publicstaticvoid Main()        {            test t =new test();        }    }}

转载于:https://www.cnblogs.com/runliuv/archive/2013/03/22/2974945.html

C# abstract ,virtual ,override,new --比较好的文章相关推荐

  1. c#中的interface abstract virtual override和new

    from:(http://hi.baidu.com/21tian/blog/item/aabfae6ed4a675de81cb4ab4.html) interface用来声明接口 1.只提供方法的规则 ...

  2. 【C#】override,Abstract,Virtual 介绍及区别--转载

    要扩展或修改继承的方法.属性.索引器或事件的抽象实现或虚实现,必须使用 override 修饰符. 1. override 方法提供从基类继承的成员的新实现.通过 override 声明重写的方法称为 ...

  3. Sealed,new,virtual,abstract与override的区别

    1. Sealed: a) 密封类不能被继承. b) 密封方法可以重写基类中的方法,但其本身不能在任何派生类中进一步重写.当应用于方法或者属性时,sealed修饰符必须始终与Override一起使用. ...

  4. sealed、new、virtual、abstract与override 趣解

    1. sealed--"断子绝孙"密封类不能被继承.密封方法可以重写基类中的方法,但其本身不能在任何派生类中进一步重写.当应用于 方法或属性时,sealed修饰符必须始终与over ...

  5. 谈谈C#中的三个关键词new , virtual , override(装载 Winner.Net)

    C#支持单继承,说到继承就不得不说new,virtual和override这三个关键词,灵活正确的使用这三个关键词,可以使程序结构更加清晰,代码重用性更高. 以下是msdn中对new,virtual和 ...

  6. 谈谈C#中的三个关键词new , virtual , override

    谈谈C#中的三个关键词new , virtual , override C#支持单继承,说到继承就不得不说new,virtual和override这三个关键词,灵活正确的使用这三个关键词,可以使程序结 ...

  7. C# selecd,new,virtual,abstract与override

    本文大部分内容摘自  <.NET开发专家·亮剑.NET : .NET深入体验与实战精要> 博主只是搬运工,不喜勿喷. 关于虚方法,抽象类这一部分一直不是太清楚,目前的工作中也接触不到这些. ...

  8. 【原创】C# Sealed、new、virtual、abstract、override的理解

    1.sealed 密封类不能被继承,密封方法可以重写基类中的方法,但其本身不能在任何派生类(子类)中 进一步重写.当应用于属性或者方法时,sealed 修饰符必须始终和override一同使用. 通俗 ...

  9. new,virtual,override,interface,delegate,event-------------C#——方法实现总结

    C#--方法实现总结 本文分两部分来写,第一部分:C#方法实现的理解与问题,第二部分:C#中方法实现的种类. 第一部分:C#方法实现的理解与问题 理解: 1. 使用virtual和override关键 ...

  10. System Center Virtual Machine Manager 2012 SP1系列文章

    部署SCVMM2012 SP1 集群(1)---部署AD http://fengxja.blog.51cto.com/1410070/1127626 部署SCVMM2012 SP1 集群(2)---部 ...

最新文章

  1. 生产异常反馈流程图_企业生产现场管理做到这些,想不成功都难
  2. github中SSH的Key
  3. 整体管理6个过程及相关重点
  4. 系统 销售订单号_销售单,进货单自动计算,一键保存的进销存管理系统,十分好用...
  5. java 对象转json,java首字母小写,判断方法是否为javabean方法
  6. [manacher] hdu 3294 Girls#39; research
  7. 参加第六届中国制造业MES应用年会
  8. 京沪等地11月房价半年来首涨 平价走量将成主流
  9. 01-jbpm工作流实现
  10. PLC江湖波澜不惊,自动化风云录!
  11. RabbitMQ使用手册中文
  12. 问卷设计二:问题设计要遵循哪些原则?
  13. namespace什么意思
  14. java complex_用java定义一个复数类Complex,能够创建复数对象,并且实现复数之间的加、减运算...
  15. 小米34寸带鱼屏显示器的耗电计算
  16. SKR EOS 竞猜游戏再遭攻击,黑客共获利约4000eos
  17. linux上的网络相关命令行
  18. lsdyna如何设置set中的node_list_如何理解vue的双向绑定
  19. Couldn't read row 0, col 0 from CursorWindow. Make sure the Cursor is initia
  20. ThinkCMF-上传多个图片源码解读

热门文章

  1. 几何画板构造象限平分线的步骤
  2. POJ 3415 Common Substrings (后缀数组,长度不小于k的公共子串的个数)
  3. 分支程序设计03 - 零基础入门学习C语言12
  4. Mysql 的ERROR 1005 (HY000): Can't create table 'xxx' (errno: 150)
  5. oracle 回表是什么,ORACLE回表
  6. element ui的table组件在鼠标滑动时边框线消失的解决
  7. ps 显示当前进程的状态
  8. python自动发帖源码_Python3实现的 自动发帖小工具 -电脑资料
  9. python语言的基本数据类型_python语言基本数据类型-深浅拷贝
  10. 计算机应用计算专业难吗,计算机应用专业好学吗