方法仅因可选参数错误而异

时间:2012-07-18 17:48:37

标签: c# vb.net

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] )因为String'不能相互重载,因为它们只有可选参数不同。

3 个答案:

答案 0 :(得分:3)

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

如果删除第二种方法的可选部分,它将自动编译 GetAuthor(int, int)GetAuthor(int, int, int)只能解析为您的第一种方法,而GetAuthor(int, int, int, int)只能解析为您的第二种方法,从而通过其参数使重载唯一

答案 1 :(得分:0)

您必须找到区分所有这些可能的呼叫的方法:

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

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

答案 2 :(得分:0)

编译器对要解决的方法感到困惑。

如果你打电话

怎么办?
GetAuthor(1, 1, 250)

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

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

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

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

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

“作为编译器,我很困惑,因此我会告诉你。”

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