C#多态2

2019-12-30C#

If there are two methods at different levels of the hierarchy,the
“deeper” one will be chosen first,even if it isn’t a “better function
member” for the call.

还 –

It turns out that if you override a base class method in a child
class,that doesn’t count as declaring it.

现在让我们回到我的问题:

情况1

好的.根据文章

“deeper” one will be chosen first,even if it isn’t a “better function. and it doesn’t count the override…

所以它是正确的,程序发出“3”. (执行Foo(对象x))

让我们改变1行的顺序:

案例2

现在它发出“2”.

现在让我们将所有int更改为object,将所有对象更改为int:

案例3

问题:

问题#1:在案例2中,Child从父亲继承了Foo(对象x)并且他也覆盖了一个方法.

但我们只是这样说:

It turns out that if you override a base class method in a child
class,that doesn’t count as declaring it

???

事实上,我们还没有宣布继承的功能……所以这种情况下的规则是什么?

问题#2:在案例3中,Child从父亲那里继承了Foo(int x)并且他也覆盖了一个方法.

但现在,他选择了父亲的功能……

似乎覆盖只有在完全匹配时才会获胜.

再次,这种情况下的规则是什么?

解决方法

请参阅类型T中名称为N的 member lookup process(在您的案例中,类型为Child的成员Foo):

首先,构造在T中声明为N的所有可访问(第3.5节)成员的集合,并构造T的基本类型(第7.3.1节):

包含覆盖修饰符的声明将从集合中排除.

参数有整数类型.所以,这里最好的选择是(参数类型匹配参数类型)

而这种方法叫做.但它是虚方法.由于virtual method invocation机制而调用它:

For every virtual method declared in or inherited by a class,there
exists a most derived implementation of the method with respect to
that class. The most derived implementation of a virtual method M with
respect to a class R is determined as follows:

  • If R contains the introducing virtual declaration of M,then this is the most derived implementation of M.

  • Otherwise,if R contains an override of M,the most derived implementation of M with respect to R is the same as the most derived implementation of M with respect to
    the direct base class of R.

什么是关于类Child的虚拟void Foo(int x)方法的最多派生实现?是的

这是被调用的.第三个样本中应用了相同的规则.但是当重写方法删除后剩下两个选项时,最佳选择(由于参数类型)是非虚方法.

-------------------------------------------------------------------------------------

new public void Show()中的new是隐藏基类Show作用。

在子类Show中写一个和基类Show一样名字的非虚方法,会让基类中的函数被隐藏,编译后会提示要求使用baiNew关键字来显示的隐藏基类的方法。

(0)

相关推荐

  • this 的值到底是什么?一次说清楚

    你可能遇到过这样的 JS 面试题: var obj = { foo: function(){ console.log(this) }}var bar = obj.fooobj.foo() // 打印出 ...

  • 多态

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

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

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

  • 类的多态(三)

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

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

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

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

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

  • Java中的多态详解

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

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

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

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

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

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

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

  • 一篇文章让你掌握多态

    一篇文章让你掌握多态