2012-07-18 67 views
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 

我不知道这是什么问题。我收到此错误消息。方法只有可选参数不同

'功能GetAuthor(ENTITYID作为整数,AUTHORID作为整数,[authorImageWidth为整数= 250])作为字符串' 和“功能GetAuthor(ENTITYID作为整数,AUTHORID作为整数,feedId作为整数,[authorImageWidth作为整数= 250])由于字符串'不能相互重载,因为它们只有可选参数不同。

回答

3

如果调用GetAuthor(INT,INT,INT)编译器将具有2种方法,你要因为这两个将适合不知道(这也正是这个消息告诉你)

如果您删除你的第二个方法的可选部分,它将编译自 GetAuthor(int, int)GetAuthor(int, int, int)只能解决你的第一个方法和GetAuthor(int, int, int, int)关于你的第二因而通过它的参数

0

你必须找到一个办法来区分制作独特的过载所有这些可能的调用之间:

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

第二行和第三行具有相同的签名。另一种方法是改变的功能之一的名称,或定义authorImageWidth别的地方,或者对authorImageWidth的类型更改为String或大于Integer其他的东西。

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 

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

两者都是有效的,因为,因为编译器已经告诉你,这......不能因为它们的差异仅在于可选参数重载对方。