2012-07-18 72 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 

「作爲編譯器,我很困惑,所以我會讓你知道的。」

兩者都是有效的,因爲,因爲編譯器已經告訴你,這......不能因爲它們的差異僅在於可選參數重載對方。