gpt4 book ai didi

vb.net - 使用重载成员 vb.net 实现继承接口(interface)

转载 作者:行者123 更新时间:2023-12-03 23:31:23 26 4
gpt4 key购买 nike

我正在尝试在类中实现派生接口(interface)。我的接口(interface)和类类似于以下内容。命名空间与包含这些接口(interface)和类的不同项目相关:

Namespace ns1

Public Interface IParent

Function myFunction() As Double

End Interface

End ns1

Namespace ns2

Public Interface IDerived
Inherits ns1.IParent

Overloads / Shadows Function myFunction(ByRef myObject as Object) As Double

End Interface

End ns2

Namespace ns3

Public Class myClass
Implements ns2.IDerived

Public Function myFunction(ByRef obj as Object) As Double Implements ns2.IDerived.myFunction

End Function

End ns3

在派生接口(interface)中,我试图以这样一种方式重载函数,即当我实现派生接口(interface)时,我只需要实现其中定义的函数 - 正如上面“myClass”上的代码所做的那样。但是,我收到一条错误消息,说我还必须从父接口(interface)(使用空参数列表)实现该函数。无论我在派生接口(interface)中的函数上使用重载还是阴影,错误都存在 - 两者都会导致错误。

有没有办法完成我想做的事情——在我的类中只实现派生接口(interface)的函数——使用接口(interface)?如果没有使用接口(interface)的方法,任何人都可以建议另一种方法吗?我们确实需要使用接口(interface)并试图避免使用类。也就是说,抽象类允许我们做所有我们需要做的事情。

我已经阅读了很多关于这个问题所涵盖的所有主题的信息,因为每个概念都非常基本,并且在在线帮助中得到了很好的介绍。但是,我还没有找到任何我认为可以直接解决我的具体问题的方法。

提前感谢您的帮助。

最佳答案

我不知道这是否是一个错字,但您有两种不同的方法:一种不带参数,另一种带对象,因此编译器要求是合法的。

如果这是一个错字并且你只有一个方法,比如“myFunction()”,那么我担心 VB.Net 不像 C# 通过简单地隐藏基本接口(interface)并允许只实现派生接口(interface)。

但是您可以通过转发轻松解决此问题:

Namespace ns1

Public Interface IParent

Function myFunction() As Double

End Interface

End Namespace

Namespace ns2

Public Interface IDerived
Inherits ns1.IParent

Function myFunction() As Double

End Interface

End Namespace

Namespace ns3

Public Class Class1
Implements ns2.IDerived

Public Function myFunction() As Double Implements ns2.IDerived.myFunction
Return 42
End Function

Private Function myFunction1() As Double Implements ns1.IParent.myFunction
Return myFunction()
End Function
End Class

End Namespace

Module Module1

Sub Main()
Dim cp As ns1.IParent = New ns3.Class1
cp.myFunction()

Dim cd As ns2.IDerived = New ns3.Class1
cd.myFunction()
End Sub

End Module

编辑:
所以不是错字,这是标准(好的/最佳实践?)修复:
Public Class Class1
Implements ns2.IDerived

Public Function myFunction(ByRef obj As Object) As Double Implements ns2.IDerived.myFunction

End Function

Public Function myFunction() As Double Implements ns1.IParent.myFunction
Throw New NotImplementedException("'ns1.IParent.myFunction' has not been implemented because unicorns can't fly!")
End Function
End Class

关于vb.net - 使用重载成员 vb.net 实现继承接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17223685/

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