也许问题的标题不合适,因为模块中的方法不能被遮蔽,但实质上我想隐藏一个基础成员再次声明它,并隐藏它而不会失去调用它的机会并返回适当的价值。
通常我会为Classes执行此操作:
<EditorBrowsable(EditorBrowsableState.Never)>
Public Shadows Function Equals(ByVal obj As Object) As Boolean
Return MyBase.Equals(obj)
End Function
这适用于结构:
<EditorBrowsable(EditorBrowsableState.Never)>
Public Shadows Function Equals(ByVal obj As Object) As Boolean
Return Object.Equals(obj, Me)
End Function
我发现尝试使用模块重现此行为的问题是我应该用来填充下面示例中的interrogant参数,因为我不能使用Me
,模块名称,或者一个构造函数,我理解它,但我需要使用它吗?。
Module TestModule
<EditorBrowsable(EditorBrowsableState.Never)>
Public Function Equals(ByVal obj As Object) As Boolean
Return Object.Equals(obj, ?)
End Function
End Module
答案 0 :(得分:2)
这有规则......只是你不能。
您只能在班级使用Shadows
。这意味着Shadows元素的声明上下文必须是一个类,不能是源文件,命名空间,接口,模块,结构或过程。
这就是为什么你可以在一个结构和类......
请参阅更多here。在底部,它说明了阴影可以存在的背景。
修改 - 解决方案
当您可以使用标准 或 创建自己的函数来确定两者是否完全无法确定为什么要调用Object.Equals
对象是平等的。
这是一个简单的解决方案,您可以通过 尝试和测试 来解决这个问题。此外,如果你想对许多对象使用Equals
,那么你需要为你所比较的内容提供更多结构,这会影响Equals
函数。
Module TestModule
Sub Main()
Dim a As New Person("Stack", "Overflow")
Dim b As New Person("Stack", "Overflow")
Console.WriteLine(a.Equals(b))
End Sub
Public Structure Person
Private FirstName As String
Private LastName As String
Public Sub New(firstName As String, lastName As String)
Me.FirstName = firstName
Me.LastName = lastName
End Sub
<EditorBrowsable(EditorBrowsableState.Never)>
Public Shadows Function Equals(ByVal obj As Object) As String
Return If(Object.Equals(obj, Me), "TRUE", "FALSE").ToString
End Function
End Structure
End Module
现在你可能想知道为什么Equals
返回String
,我故意这样做,所以你可以看到它确实影响了基类,因为我返回了另一种类型,否则你可&#39;吨。您可以更改该函数以返回Boolean
并更改返回,它可以正常工作。
答案 1 :(得分:0)
这个在Object中定义的函数似乎是你想要影响的函数:
Public Overridable Function Equals (obj As Object) As Boolean
然而,这在模块中不存在。在您的模块名称是共享名称后,您看到智能感知的“等于”:
Public Shared Function Equals (objA As Object, objB As Object) As Boolean
您可以在documentation中单独列出它们。要停止Intellisense建议,只需将其包含在您的模块中:
<EditorBrowsable(EditorBrowsableState.Never)> _
Public Function Equals(objA As Object, objB As Object) As Boolean
Return Object.Equals(objA, objB)
End Function
虽然
看起来不太好