【发布时间】:2019-08-27 04:29:59
【问题描述】:
我正在通过 Common Language Infrastructure 书籍学习中间语言。
它指出虚拟类型的方法可以用newslot 属性标记。但是那个属性真的让我很困惑,我无法理解它的含义。
这里是引用:
II.10.3 - 引入和覆盖虚拟方法
通过提供方法的直接实现来覆盖基类型的虚方法 (使用方法定义,请参阅 §II.15.4)并且未将其指定为新闻栏(§II.15.4.2.3)。一个现有的 方法体也可用于使用 .override 指令实现给定的虚拟声明 (§II.10.3.2)。
II.10.3.1 引入虚方法
通过定义虚拟方法(§II.15.4)在继承层次结构中引入虚拟方法。这 可以将定义标记为新闻栏以始终为定义类和任何创建新的虚拟方法 从它派生的类:
1) 如果定义被标记为newslot,定义总是创建一个新的虚拟 方法,即使基类提供了匹配的虚拟方法。一个参考 虚拟方法通过包含方法定义的类,或通过派生的类 从该类中,指的是新定义(除非在 派生类)。任何不通过包含 方法定义,也不通过其派生类,引用原始定义。
2) 如果定义没有标记newslot,则定义创建一个新的虚方法 仅当不存在从 a 继承的同名和签名的虚拟方法时 基类。
因此,当一个虚方法被标记为newslot时,它的引入不会影响任何现有的 在其基类中引用匹配的虚拟方法。
“定义创建一个新的虚方法”这句话是什么意思?我认为引入虚拟方法总是会创建新方法。我认为新闻频道是无用的属性。任何人都可以提供示例来澄清该文本吗?
【问题讨论】: