C#多态1

原文:http://www.voidcn.com/article/p-kbkvvqoc-btr.html

我已经开始明白我不明白发生了什么. C#中有以下行为:

它会打印

public void方法(B a)

代替

public void方法(D a)

令人惊讶我认为这个行为的原因是方法表的实现.如果在当前类型中找到相应的方法,则CLR不会搜索基类中的方法.我认为他们正在努力提高表现.

但是我完全失望了以下代码:

它将打印

public void方法(B a)

代替

public override void方法(D a)

这是可怕的,非常不可预测的.

有人可以解释吗

我认为方法表只有在当前类型中实现的方法(不包括重写方法),并且一旦找到可以调用的任何方法,CLR就会停止寻找对应的方法.我对吗?

I have started to understand that I do not understand what is going on.

因此开始智慧

It’s awful and very unpredictable.

既不是相比之下,该功能旨在通过消除脆弱基类故障的原因来减少不可预测性.

Can anyone explain it?

参见我2007年关于这个主题的文章.

http://www.voidcn.com/link?url=https://blogs.msdn.microsoft.com/ericlippert/2007/09/04/future-breaking-changes-part-three/

简短版本虽然是:派生类中的方法总是比基类中的方法更好;编写派生类的人更了解对象语义,并且处理比编写基类的人更具体的案例.

Servy指出,我没有覆盖你的第二点.为什么派生类中的重写不会在派生类中使用“D”方法?

虚拟方法被认为是被声明的类的方法,而不是最近被覆盖的类.为什么?因为选择是否覆盖是一个类的实现细节,而不是公共表面区域的一部分.

我的意思是想一想.你写一些代码,它的工作,然后你说,嘿,我要在这个类型层次结构中的某个地方做一个新的(或删除一个旧的!)覆盖这个方法,突然改变了其他地方的重载分辨率?这正是C#试图消除的那种脆弱性.

记住,C#是非常精心设计的,代码正在被人们编辑的世界中.许多现代语言奇怪的是,设计好像一个人正在写所有的代码,他们第一次得到它;这不现实. C#中的一些更不寻常的功能,就像您发现的一样,可以帮助您保持程序行为的可预测性,即使其他人正在编辑基类.

相关文章

(0)

相关推荐

  • Java基本概念:多态

    一.简介 描述: 多态性是面向对象编程中的一个重要特性,主要是用来实现动态联编的.换句话说,就是程序的最终状态只有在执行过程中才被决定,而非在编译期间就决定了.这对于大型系统来说能提高系统的灵活性和扩 ...

  • 异常

    异常 异常指程序运行中出现的不期而至的各种情况 发生在程序运行期间,影响了正常的程序执行流程 需要掌握的三种情况: 检查异常(非运行时异常):编译时可以看到,除了运行时异常,其他都是非运行时异常 不检 ...

  • 一文介绍Java编程思想--接口

    编程人员是最勤快的人,也是最懒惰的一群人,总是不断地学习,能够自动完成的绝对不会手写.要成为合格的Java全栈工程师?请完全理解Java的编程思想! 接口 interface关键字使抽象的概念更向前迈 ...

  • Java向上转型与向下转型知识点整理

    本篇博客的由来是自己对于java多态里的向上转型与向下转型概念及用法不明了,所以查询资料整理如下所示,参照了许多大神的写法,终有所掌握. 概念 Java中的继承机制使得一个类可以继承另一个类,继承的类 ...

  • 面向对象的核心特征之:封装、继承、多态

    面向对象的核心特征之:封装、继承、多态

  • 多态

    多态 即同一方法可以根据发送对象的不同而采用多种不同的行为方式 一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多 注意: 多态是方法的多态,属性没有多态 有父类和子类的关系,类型转换异常: ...

  • C++面向对象:C++ 多态

      ​ 多态按字面的意思就是多种形态.当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态. C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数. 小编推荐一个学C ...

  • 类的多态(三)

    子类即是父类对象,这一点还需要再强调一下,尤其是在作为方法的参数时,特别好用,可以经常用. 以形状为例. 1.形状shape是一个接口,里面只有一个计算面积的抽象方法. 2.圆Circle是一个类,实 ...

  • Java学习——37、类的多态(二)

    类型的多态主要体现在:子类是一种父类类型. 子类通过继承扩充和发展了它的父类,子类是父类的一种特殊类型. 1.子类对象即是父类对象 子类对象包含了父类的所有成员,包括成员变量和成员方法,所以子类对象也 ...

  • Java学习——36、类的多态(一)

    多态性是指"一种定义,多种实现".例如,画画.同是画画,但每一个人,会画出来不同的画,这就是多态. 多态主要有方法的多态和类型的多态. 今天介绍方法的多态. 方法的多态包括方法的重 ...

  • Java中的多态详解

    一.多态的概念 多态分为类的多态和方法的多态,类的多态就是一个类型可以有不同的表现形态,什么样的类型才会具备多态呢?只有被多个子类继承或者实现的父类才具备多态的特征,因为在运行期间可以根据具体的子类表 ...

  • 罗素:参差多态乃是幸福之本源

            罗素,英国哲学家,也是数学家.逻辑学家.历史学家.文学家--他获得诺贝尔文学奖的时候,瑞典文学院的评语说:由于对当前世局的共同忧虑而共同强调人类行为的理性化.罗素对西方文明的哲思,对现 ...

  • 赵丽颖的幸福感,参差多态,每天前进一小步

    她被誉为拼命三娘,也被称为不老小仙女,多部影视作品深受大家喜爱,她就是赵丽颖.赵丽颖的幸福感,参差多态,每天前进一小步.温馨提示:本文约1000字,阅读需要一分钟左右. 2月8日,颖宝(赵丽颖本文简称 ...

  • 随心周六 | 罗素《幸福之路》:参差多态乃是幸福的本源

    今日豆瓣评分8.8分,2785人评价 内容简介 xxxxxxxxx <幸福之路>作者罗素在书中的论述是最为精彩纷呈和实用有效的.亚里士多德论述过哲学家纯粹思辨的幸福:帕斯卡尔描述过圣者皈依 ...

  • 一篇文章让你掌握多态

    一篇文章让你掌握多态