当两个方法同名但参数不同时如何在VB.Net中实现一个接口
Posted
技术标签:
【中文标题】当两个方法同名但参数不同时如何在VB.Net中实现一个接口【英文标题】:How to implement an interface in VB.Net when two methods have the same name but different parameters 【发布时间】:2011-01-23 06:48:30 【问题描述】:我是一名 C# 程序员,但我必须使用一些 VB.Net 代码,我遇到了这样一种情况,即我在一个接口上有两个方法,名称相同但方法参数不同。当我试图在一个类中实现这个接口时,VB.Net 要求在方法签名之后显式声明“Implements MethodName”。由于两个方法名称相同,这会使编译器感到困惑。有没有办法解决这类问题?我怀疑这一定是普遍现象。有什么想法吗?
注意这更像是程序员没有验证有问题的接口没有从他下面改变的情况。
【问题讨论】:
【参考方案1】:这如何混淆编译器? 编译器希望为每个方法签名找到一个实现,并通过它们的签名来区分这些实现。
如果签名相同/无法区分(在大多数情况下,这意味着参数的类型相同,顺序相同),您将收到与接口相关的设计时错误,表示这两种方法不能重载因为他们有相同的签名。
所以,无论如何,编译器都不应该混淆。 如果您需要进一步的帮助,请附上代码示例 - 这些问题相对容易解决。
提示:在编写实现时,只要您写下“implements MyInterface”并按 Enter - Visual Studio 将创建实现的“骨架”代码,从而节省您编写方法签名和关联它们的时间到界面。
具有两个同名方法且一切正常的示例代码:
Interface MyInterface
Sub MySub(ByVal arg0 As DateTime)
Sub MySub(ByVal arg0 As ULong)
End Interface
Class MyImplementation
Implements MyInterface
Public Sub MySub(ByVal arg0 As Date) Implements MyInterface.MySub
...
End Sub
Public Sub MySub(ByVal arg0 As ULong) Implements MyInterface.MySub
...
End Sub
End Class
【讨论】:
【参考方案2】:您可以将方法设为私有并为其命名。
喜欢:
Private Sub SaveImpl(ByVal someEntity As IEntity) Implements IRepository.Save
这看起来像:someRepository.Save
【讨论】:
这种技术对于显式实现接口也很有用,即只有当对象被视为接口类型时该方法才可用,否则不可见。类似于 C# 中的显式接口实现。以上是关于当两个方法同名但参数不同时如何在VB.Net中实现一个接口的主要内容,如果未能解决你的问题,请参考以下文章