C#非常重要基础之多态
前几天看了一位同志的博客,写的是关于他自己去支付宝面试的经历。过程大体是这样的:问答的时候,前面部分,作者都应答如流,说起自己经验如何之丰富,最后面试官问了作者一个问题:请简述多态的概念和作用。结果这位作者竟然说这么基础的问题还真不记得了,于是,面试失败。
其实多态,是个很基础的,也非常重要的概念,作为程序开发者,这些基础的概念必须非常牢固,在开发的过程中,才能得心应手。
同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。举个通俗的例子:摩托车和汽车都是车子的派生类,如果我在另一个类中需要调用车子的刹车方法,那么我只需要把车子的对象传参数进去,然后调用“刹车()”方法即可。而摩托车和汽车的刹车的方法实现不同,虽然都叫“刹车”,但一个是手抓,一个是脚踩。但我们调用的时候不需要知道具体的实现,只管根据名称调用即可,具体则根据示例的不同,而有不同的刹车方法的实现。
多态分为两种:编译时的多态,和运行时的多态
编译时的多态:是通过重载来实现的。重载,即方法名称相同,而参数的类型不同,或者参数的个数不同。最典型的重载是我们常用的“message”类下面的方法“show()”,一个参数代表弹出的信息内容,第二个参数代表弹窗标题,等等。
运行时的多态:通过虚成员的方式实现。在继承关系里面,子类会继承父类所有的属性,方法,事件。那么如果子类需要更改某个方法(通俗的讲,可以理解为子类需要一个和父类中同名的方法,但不同的实现),有两种方法。而这两种方法的区别,非常重要。
- 使用New关键字。当子类中使用New关键字来覆盖父类中的同名方法时,父类的成员则被隐藏了,称为“隐藏成员”。
- 基类中将成员声明为虚成员。在基类成员的返回类型之前加关键字“virtual ”即可声明为虚拟成员。派生类,可以对虚拟成员进行重写,重写加关键字“override ”即可。同样可以实现替换基类的老成员。
那么,这两种方式有什么不同呢?
如果使用New来覆盖基类成员的时候,当派生类实例被转换为基类型使用的时候,调用的成员会是被New隐藏掉的隐藏成员,是旧的。而如果是通过虚成员重写的方式,那么调用的,会是被派生类重写之后的新成员。
明白了么?如果分不清楚,可以这样记:New覆盖,只是用新的换了旧的,旧的还是存在,重写,是把父类的也重新给写了。
明白这个区别之后,什么时候该怎么用,也明白了吧。
C#非常重要基础之多态的更多相关文章
- Java基础十一--多态
Java基础十一--多态 一.多态定义 简单说:就是一个对象对应着不同类型. 多态在代码中的体现: 父类或者接口的引用指向其子类的对象. /* 对象的多态性. class 动物 {} class 猫 ...
- 五.OC基础--1.多态,2.类对象,3.点语法,4.@property&@synthesize,5.动态类型,内省(判断对象是否遵循特定的协议,以及是否可以响应特定的消息)
五.OC基础--1.多态, 1. 多态概念,定义:多态就是某一类事物的多种形态: 表现形式: Animal *ani = [Dog new]; 多态条件:1.有继承关系 2.有方法的重写 2.多态代码 ...
- Java基础之多态和泛型浅析
Java基础之多态和泛型浅析 一.前言: 楼主看了许多资料后,算是对多态和泛型有了一些浅显的理解,这里做一简单总结 二.什么是多态? 多态(Polymorphism)按字面的意思就是“多种状态”.在面 ...
- 30天C#基础巩固-----多态,工厂模式
自己要有自信,相信自己可以找到好的工作.面对校招,企业更加看重自己的基础,这30天就把C#的基础好好的复习,学习下.笔记一定要认真的记录,这样自己复习回顾的时候就有了可以参考的东西了. 一: ...
- Objective-C基础之──多态
Objective-C语言是面向对象的高级编程语言,因此,它具有面向对象编程所具有的一些特性,即:封装性.继承性和多态性. 今天介绍一下Objective-C中的多态性. 一.什么是多态 多态:不同对 ...
- Python基础之多态与多态性
切记:不要将多态与多态性这二者混为一谈,只要分开,就会很明朗了. 一.多态 多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承). 比如:动物分为人类.狗类.猪类(在定义角 ...
- iOS开发Objective-C基础之──多态
Objective-C语言是面向对象的高级编程语言,因此,它具有面向对象编程所具有的一些特性,即:封装性.继承性和多态性. 今天介绍一下Objective-C中的多态性. 一.什么是多态 多态:不同对 ...
- 【Java基础】多态
首先先来个总结: 什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消 ...
- java基础之 多态
在面向对象编程(Object-Oriented Programming, OOP)中,多态机制无疑是其最具特色的功能,甚至可以说,不运用多态的编程不能称之为OOP.这也是为什么有人说,使用面向对象语言 ...
随机推荐
- .Net多线程编程—并发集合
并发集合 1 为什么使用并发集合? 原因主要有以下几点: System.Collections和System.Collections.Generic名称空间中所提供的经典列表.集合和数组都不是线程安全 ...
- Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)
背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...
- web全栈开发之网站开发二(弹出式登录注册框前端实现-类腾讯)
这次给大家分享的是目前很多网站中流行的弹出式登录框,如下面的腾讯网登录界面,采用弹出式登录的好处是大大提升了网站的用户体验和交互性,用户不用重新跳转到指定的页面就能登录,非常方便 先来个演示地址 要实 ...
- 【.net 深呼吸】程序集的热更新
当一个程序集被加载使用的时候,出于数据的完整性和安全性考虑,程序集文件(在99.9998%的情况下是.dll文件)会被锁定,如果此时你想更新程序集(实际上是替换dll文件),是不可以操作的,这时你得把 ...
- 从备考PMP到与项目经理同呼吸
前言 PMP是什么梗? 项目管理专业人士资格认证.它是由美国项目管理协会(Project Management Institute(PMI)发起的,严格评估项目管理人员知识技能是否具有高品质的资格认证 ...
- .net windows Kafka 安装与使用入门(入门笔记)
完整解决方案请参考: Setting Up and Running Apache Kafka on Windows OS 在环境搭建过程中遇到两个问题,在这里先列出来,以方便查询: 1. \Jav ...
- 算法与数据结构(十七) 基数排序(Swift 3.0版)
前面几篇博客我们已经陆陆续续的为大家介绍了7种排序方式,今天博客的主题依然与排序算法相关.今天这篇博客就来聊聊基数排序,基数排序算法是不稳定的排序算法,在排序数字较小的情况下,基数排序算法的效率还是比 ...
- .NET CoreCLR开发人员指南(上)
1.为什么每一个CLR开发人员都需要读这篇文章 和所有的其他的大型代码库相比,CLR代码库有很多而且比较成熟的代码调试工具去检测BUG.对于程序员来说,理解这些规则和习惯写法非常的重要. 这篇文章让所 ...
- Java中常用集合操作
一.Map 名值对存储的. 常用派生类HashMap类 添加: put(key,value)往集合里添加数据 删除: clear()删除所有 remove(key)清除单个,根据k来找 获取: siz ...
- mysql百万级分页优化
普通分页 数据分页在网页中十分多见,分页一般都是limit start,offset,然后根据页码page计算start , 这种分页在几十万的时候分页效率就会比较低了,MySQL需要从头开始一直往后 ...