Vb.net 在派生类中调用MyBase关键字

Vb.net 在派生类中调用MyBase关键字,vb.net,Vb.net,我想问一下,当我多次重写时,它是否正确。然而事实上,我脑子里有三个问题,我不想创建单独的主题,因为它们都是相关的。谢谢你的回答 第一个问题: 假设我有一个基类,其中包含可重写的方法,然后层次结构中的所有派生类都是这样做的: BaseClass1 Overidable SomeMethodX BaseClass2:BaseClass1 Overides SomeMethodX BaseClass3:BaseClass2 Overides SomeMethodX BaseClass4:Base

我想问一下,当我多次重写时,它是否正确。然而事实上,我脑子里有三个问题,我不想创建单独的主题,因为它们都是相关的。谢谢你的回答

第一个问题: 假设我有一个基类,其中包含可重写的方法,然后层次结构中的所有派生类都是这样做的:

BaseClass1
Overidable SomeMethodX

BaseClass2:BaseClass1
Overides SomeMethodX

BaseClass3:BaseClass2
Overides SomeMethodX

BaseClass4:BaseClass3
Overides SomeMethodX
当我超越时,它是否高于正确值。像这样

第二个问题: 基于上面的例子,我是否必须总是在每次调用MyBase.SomeMethodX的ovveride方法时都输入,还是在我想输入的时候输入

第三个问题: 考虑下面的例子。当我只调用
MyBase.specificttechnologyaactions
或者我应该
返回MyBase.specifictechnologyaactions
时有什么不同吗(请解释原因)

基本类1

Protected Overridable Function SpecificTechnologyActions() As Boolean Implements ITechnologyOperation.SpecificTechnologyActions           
    Return True
End Function
Protected Overrides Function SpecificTechnologyActions() As Boolean
    MyBase.SpecificTechnologyActions()
    If Not CheckCounters() Then Return False
    Return True
End Function
BaseClass2:BaseClass1

Protected Overridable Function SpecificTechnologyActions() As Boolean Implements ITechnologyOperation.SpecificTechnologyActions           
    Return True
End Function
Protected Overrides Function SpecificTechnologyActions() As Boolean
    MyBase.SpecificTechnologyActions()
    If Not CheckCounters() Then Return False
    Return True
End Function
BaseClass3:BaseClass2

Protected Overrides Function SpecificTechnologyActions() As Boolean
    MyBase.SpecificTechnologyActions()
    If Not CheckNetworkElementsCount() Then Return False
    If Not CheckCounters() Then Return False
    Return true
End Function

1) 定义“正确”。如果重写父类的方法,我看不出有什么不正确的地方。-2) 取决于你想做什么。如果希望父类的方法代码也运行,请调用
MyBase.SomeMethodX()
,如果只希望当前类的代码运行,则不调用。--3)
Return
退出函数,忽略其后的任何代码。同样,一切都归结为您想要做什么,即:您是否希望父类的
SpecificTechnologyActions()
方法与当前类的方法一样运行?@VisualIncent通常会说我读了一些东西,比如:“返回基方法的值很好…”但我不确定这是怎么回事。这是你所知道的吗?1)这种模式没有错。2) 重写方法有两个一般原因。一个是扩充基类功能,另一个是替换它。如果要进行扩充,则应调用基类版本。3) 返回值意味着什么。问题的答案取决于返回值的含义。使用布尔返回值的示例可能表示成功或失败。在这种情况下,仅当基类方法都返回true并且代码成功时,才返回true。不要忽略基类返回值。如果你没有链接到你读到的页面,我就不能对它说什么。返回基类的值是好是坏实际上只取决于您想要或需要它做什么。@VisualIncent“某处”是几小时前同一个用户的一篇非常类似的帖子,Hans在这篇帖子上沿这些行留下了评论1)定义“正确”。如果重写父类的方法,我看不出有什么不正确的地方。-2) 取决于你想做什么。如果希望父类的方法代码也运行,请调用
MyBase.SomeMethodX()
,如果只希望当前类的代码运行,则不调用。--3)
Return
退出函数,忽略其后的任何代码。同样,一切都归结为您想要做什么,即:您是否希望父类的
SpecificTechnologyActions()
方法与当前类的方法一样运行?@VisualIncent通常会说我读了一些东西,比如:“返回基方法的值很好…”但我不确定这是怎么回事。这是你所知道的吗?1)这种模式没有错。2) 重写方法有两个一般原因。一个是扩充基类功能,另一个是替换它。如果要进行扩充,则应调用基类版本。3) 返回值意味着什么。问题的答案取决于返回值的含义。使用布尔返回值的示例可能表示成功或失败。在这种情况下,仅当基类方法都返回true并且代码成功时,才返回true。不要忽略基类返回值。如果你没有链接到你读到的页面,我就不能对它说什么。返回基类的值是好是坏实际上只取决于您想要或需要它做什么。@VisualVincent“某处”是几小时前同一用户的一篇非常类似的帖子,Hans在这篇帖子上留下了类似的评论