VB.Net的MyClass关键字的实际用途是什么?
我理解MyClass的技术用法 ; 我不明白它在现实世界中的实际用法.
如果您有任何虚拟(可覆盖)成员,则使用MyClass才有意义.但它也意味着您要忽略子类中重写的实现.这似乎是自相矛盾的.
我可以想到一些人为的例子,但它们只是糟糕的设计而不是实际用法.
MyClass从编译器的角度来看,是一种省略callvirt指令以支持call指令的方法。本质上,当您使用虚拟语义 ( ) 调用方法时callvirt,您就表明您想要使用最派生的变体。如果您希望省略派生变体,则可以使用MyClass( call)。虽然您已经声明您了解基本概念,但我认为从功能角度而不是隐含理解来描述它可能会有所帮助。它在功能上与 相同,MyBase但需要注意的是作用域是带有 的基本类型MyBase,而不是带有 的活动类型MyClass。
在层次结构中的当前点,重写虚拟调用语义通常是一个糟糕的设计选择,它唯一有效的时候是当您必须依赖对象层次结构中的特定功能,并且不能依赖继承者时通过其实现中的基本调用来调用您的变体。它还可能依赖于您作为设计者决定它是唯一的选择,因为您在对象层次结构中进一步覆盖了功能,并且您必须确保在这种极端情况下,必须在继承树的当前级别上使用此特定方法。叫。
这一切都与设计有关,了解整体设计和极端情况。C♯ 不包含此类功能可能是有原因的,因为在这些极端情况下,您可以将该方法分离到层次结构中当前级别调用的私有变体中,并在必要时引用该私有实现。我个人认为,利用分段方法是达到目的的理想手段,因为它明确了您的设计选择,并且更容易遵循(并且它也是没有与 功能等效的语言中唯一有效的MyClass手段。)
| 归档时间: |
|
| 查看次数: |
2664 次 |
| 最近记录: |