0
Function GetAuthor(entityId As Integer, authorId As Integer, Optional ByVal authorImageWidth As Integer = 250) As String

Function GetAuthor(entityId As Integer, authorId As Integer, feedId As Integer, Optional ByVal authorImageWidth As Integer = 250) As String

我不知道这有什么问题。我收到此错误消息。

'Function GetAuthor(entityId As Integer, authorId As Integer, [authorImageWidth As Integer = 250]) As String' 和 'Function GetAuthor(entityId As Integer, authorId As Integer, feedId As Integer, [authorImageWidth As Integer = 250]) As String ' 不能互相重载,因为它们的区别仅在于可选参数。

4

3 回答 3

3

如果您调用 GetAuthor(int, int, int) 编译器将不知道您想要这两种方法中的哪一种,因为这两种方法都适合(这就是这条消息告诉您的内容)

如果您删除第二个方法的可选部分,它将编译 GetAuthor(int, int),并且GetAuthor(int, int, int)只能解析为您的第一个方法和GetAuthor(int, int, int, int)您的第二个方法,从而通过其参数使重载独一无二

于 2012-07-18T17:51:50.137 回答
0

您必须找到一种方法来区分所有这些可能的调用:

GetAuthor(entityId, authorId)
GetAuthor(entityId, authorId, authorImageWidth)    
GetAuthor(entityId, authorId, feedId)              
GetAuthor(entityId, authorId, feedId, authorImageWidth)

第 2 行和第 3 行具有相同的签名。另一种方法是更改​​其中一个函数的名称,或者在authorImageWidth其他地方定义,或者将类型更改为authorImageWidthtoString或以外的其他内容Integer

于 2012-07-18T17:59:05.277 回答
0

编译器对要解析哪种方法感到困惑。

如果你打电话怎么办

GetAuthor(1, 1, 250)

编译器应该如何决定调用哪一个?

“嗯……也许他们指的是这个人,因为没有第三个参数。”

Function GetAuthor(entityId As Integer, authorId As Integer, Optional ByVal authorImageWidth As Integer = 250) As String

“但是等等!这家伙需要第三个参数,但第四个是可选的。”

Function GetAuthor(entityId As Integer, authorId As Integer, feedId As Integer, Optional ByVal authorImageWidth As Integer = 250) As String

“作为编译器,我很困惑,所以我要让你知道。”

两者都是有效的,因为正如编译器已经告诉您的那样,它......不能相互重载,因为它们仅在可选参数上有所不同。

于 2012-07-18T17:59:39.810 回答