gpt4 book ai didi

.net - 如何隐藏模块中的 Object.Equals() 方法?

转载 作者:行者123 更新时间:2023-12-02 01:27:35 25 4
gpt4 key购买 nike

也许问题的标题不合适,因为不能隐藏模块中的方法,但本质上我想隐藏一个基础成员再次声明它,并在不失去调用它和返回的机会的情况下隐藏它正确的值。

通常我在类里面这样做:

<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

我发现尝试用模块重现此行为的问题是我应该用来填充下面示例中的询问参数,因为我不能使用 Me,模块名称,还是构造函数,我明白了,但是我需要使用什么?

Module TestModule

<EditorBrowsable(EditorBrowsableState.Never)>
Public Function Equals(ByVal obj As Object) As Boolean
Return Object.Equals(obj, ?)
End Function

End Module

最佳答案

这是有规则的……只是你不能。

您可以使用 Shadows仅在类(class)。这意味着 Shadows 元素的声明上下文必须是类,不能是源文件、命名空间、接口(interface)、模块、结构或过程。

这就是为什么您可以在结构和类中...

更多请看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 ,我故意这样做是为了让您看到它确实遮盖了基类,因为我返回了不同的类型,否则您不能。您可以更改该函数以返回 Boolean并更改返回,它工作得很好。

关于.net - 如何隐藏模块中的 Object.Equals() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36166880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com