Перегрузка генерирует ошибку, хотя подписи разные - PullRequest
0 голосов
/ 13 февраля 2020

Использование vb. net У меня есть эта функция:

 Public Overloads Function GetCountValues(ByVal CampaignIDValue As String,
                                             ByVal AgentValue As String,
                                             ByVal SearchTerm As String) As Integer

Я перегружен, потому что мы делаем то же самое с этой функцией только без AgentValue.

Public Overloads Function GetCountValues(ByVal CampaignIDValue As String, ByVal SearchTerm As String) As Integer

Но компилятор настаивает на том, что подпись одинакова, хотя это не так. Если я изменю второе CampaignIDValue на «Как объект», все будет хорошо, пока вы не попробуете его использовать. Должно быть что-то, чего мне не хватает, чтобы сделать эту работу. Если вы можете помочь, я был бы признателен.

Остальные без проблем: (спасибо за ваше терпение HardCode).

Public Overloads Function GetCountValues(ByVal AgentValue As String,
                                             ByVal SearchTerm As String) As Integer
Public Overloads Function GetCountValues(ByVal CampaignIDValue As String,
                                             ByVal AgentValue As String,
                                             ByVal LCDATEValue As Date,
                                             ByVal SearchTerm As String) As Integer

этот также генерирует ошибку, если изменить объект обратно на строку

Public Overloads Function GetCountValues(ByVal CampaignIDValue As Object,
                                             ByVal LCDATEValue As Date,
                                             ByVal SearchTerm As String) As Integer

Весь класс. Скопируйте и вставьте в vb. net класс, и я думаю, что это даст вам ту же ошибку:

Public Class clsExample

    ''' <summary>
    ''' CampaignID and Agent Driven Count Values
    ''' </summary>
    Public Overloads Function GetCountValues(ByVal CampaignIDValue As String,
                                             ByVal AgentValue As String,
                                             ByVal SearchTerm As String) As Integer
        Dim x = From p In myTable.AsEnumerable
                Where LTrim(RTrim(p.CAMPAIGNID)).ToLower =
                    LTrim(RTrim(CampaignIDValue)).ToLower _
                    And LTrim(RTrim(p.AGENT)).ToLower = LTrim(RTrim(AgentValue)).ToLower _
                    And p.TERMCD.Contains(SearchTerm) 'Order By p.AGENT
                Group p By p.CAMPAIGNID, p.AGENT Into Group
                Select New With {.CAMPAIGNID = CAMPAIGNID, .Agent = AGENT, .FunctionValue = Group.Count()}
        If x.Any = True Then
            Return x.ElementAt(0).FunctionValue
        Else
            Return 0
            ' Dim NewEntry = New With {.CAMPAIGNID = CampaignIDValue, .Agent = AgentValue, .FunctionValue = 0}
            'x = NewEntry
            ' Dim Copy = x.Append(NewEntry)
            'Return Copy

        End If
    End Function

    ''' <summary>
    ''' CampaignID Driven Count Values
    ''' </summary>
    Public Overloads Function GetCountValues(ByVal CampaignIDValue As String, ByVal SearchTerm As String) As Integer
        Dim x = From p In myTable.AsEnumerable
                Where LTrim(RTrim(p.CAMPAIGNID)).ToLower =
                    LTrim(RTrim(CampaignIDValue)).ToLower _
                    And p.TERMCD.Contains(SearchTerm) 'Order By p.AGENT
                Group p By p.CAMPAIGNID Into Group
                Select New With {.CAMPAIGNID = CAMPAIGNID, .FunctionValue = Group.Count()}
        If x.Any = True Then
            Return x.ElementAt(0).FunctionValue
        Else
            Return 0
            ' Dim NewEntry = New With {.CAMPAIGNID = CampaignIDValue, .Agent = AgentValue, .FunctionValue = 0}
            'x = NewEntry
            ' Dim Copy = x.Append(NewEntry)
            'Return Copy

        End If
    End Function


    'Public Overloads Function GetCountValues(ByVal CampaignIDValue As String,
    '                                         ByVal SearchTerm As String) As Integer
    '    Dim x = From p In myTable.AsEnumerable
    '            Where LTrim(RTrim(p.CAMPAIGNID)).ToLower =
    '                LTrim(RTrim(CampaignIDValue)).ToLower _
    '                And p.TERMCD.Contains(SearchTerm)
    '            Group p By p.CAMPAIGNID Into Group
    '            Select New With {.CAMPAIGNID = CAMPAIGNID, .FunctionValue = Group.Count()}
    '    If x.Any = True Then
    '        Return x.ElementAt(0).FunctionValue
    '    Else
    '        Return 0
    '        ' Dim NewEntry = New With {.CAMPAIGNID = CampaignIDValue, .Agent = AgentValue, .FunctionValue = 0}
    '        'x = NewEntry
    '        ' Dim Copy = x.Append(NewEntry)
    '        'Return Copy

    '    End If
    'End Function

    ''' <summary>
    ''' Agent Driven Count Values
    ''' </summary>
    Public Overloads Function GetCountValues(ByVal AgentValue As String,
                                             ByVal SearchTerm As String) As Integer
        Dim x = From p In myTable.AsEnumerable
                Where LTrim(RTrim(p.AGENT)).ToLower =
                    LTrim(RTrim(AgentValue)).ToLower _
                    And p.TERMCD.Contains(SearchTerm)
                Group p By p.AGENT Into Group
                Select New With {.Agent = AgentValue, .FunctionValue = Group.Count()}
        If x.Any = True Then
            Return x.ElementAt(0).FunctionValue
        Else
            Return 0
            ' Dim NewEntry = New With {.CAMPAIGNID = CampaignIDValue, .Agent = AgentValue, .FunctionValue = 0}
            'x = NewEntry
            ' Dim Copy = x.Append(NewEntry)
            'Return Copy

        End If
    End Function

    ''' <summary>
    ''' LCDate, CampaignID and Agent Driven Count Values
    ''' </summary>
    Public Overloads Function GetCountValues(ByVal CampaignIDValue As String,
                                             ByVal AgentValue As String,
                                             ByVal LCDATEValue As Date,
                                             ByVal SearchTerm As String) As Integer
        Dim x = From p In myTable.AsEnumerable
                Where LTrim(RTrim(p.CAMPAIGNID)).ToLower =
                    LTrim(RTrim(CampaignIDValue)).ToLower _
                    And LTrim(RTrim(p.AGENT)).ToLower = LTrim(RTrim(AgentValue)).ToLower _
                    And p.TERMCD.Contains(SearchTerm) 'Order By p.AGENT
                Group p By p.LCDATE, p.CAMPAIGNID, p.AGENT Into Group
                Select New With {.LCDATE = LCDATEValue, .CAMPAIGNID = CAMPAIGNID, .Agent = AGENT, .FunctionValue = Group.Count()}
        If x.Any = True Then
            Return x.ElementAt(0).FunctionValue
        Else
            Return 0
            ' Dim NewEntry = New With {.CAMPAIGNID = CampaignIDValue, .Agent = AgentValue, .FunctionValue = 0}
            'x = NewEntry
            ' Dim Copy = x.Append(NewEntry)
            'Return Copy

        End If
    End Function

    ''' <summary>
    ''' LCDate and CampaignID Driven Count Values
    ''' </summary>
    Public Overloads Function GetCountValues(ByVal CampaignIDValue As Object,
                                             ByVal LCDATEValue As Date,
                                             ByVal SearchTerm As String) As Integer
        Dim x = From p In myTable.AsEnumerable
                Where LTrim(RTrim(p.CAMPAIGNID)).ToLower =
                    LTrim(RTrim(CampaignIDValue)).ToLower _
                    And p.TERMCD.Contains(SearchTerm) 'Order By p.AGENT
                Group p By p.LCDATE, p.CAMPAIGNID Into Group
                Select New With {.LCDATE = LCDATEValue, .CAMPAIGNID = CAMPAIGNID, .FunctionValue = Group.Count()}
        If x.Any = True Then
            Return x.ElementAt(0).FunctionValue
        Else
            Return 0
            ' Dim NewEntry = New With {.CAMPAIGNID = CampaignIDValue, .Agent = AgentValue, .FunctionValue = 0}
            'x = NewEntry
            ' Dim Copy = x.Append(NewEntry)
            'Return Copy

        End If
    End Function

    ''' <summary>
    ''' LCDate and Agent Driven Count Values
    ''' </summary>
    Public Overloads Function GetCountValues(ByVal AgentValue As String,
                                             ByVal LCDATEValue As Date,
                                             ByVal SearchTerm As String) As Integer
        Dim x = From p In myTable.AsEnumerable
                Where LTrim(RTrim(p.AGENT)).ToLower =
                    LTrim(RTrim(AgentValue)).ToLower _
                    And p.TERMCD.Contains(SearchTerm) 'Order By p.AGENT
                Group p By p.LCDATE, p.AGENT Into Group
                Select New With {.LCDATE = LCDATEValue, .Agent = AgentValue, .FunctionValue = Group.Count()}
        If x.Any = True Then
            Return x.ElementAt(0).FunctionValue
        Else
            Return 0
            ' Dim NewEntry = New With {.CAMPAIGNID = CampaignIDValue, .Agent = AgentValue, .FunctionValue = 0}
            'x = NewEntry
            ' Dim Copy = x.Append(NewEntry)
            'Return Copy

        End If
    End Function

    ''' <summary>
    ''' LCDate Driven Count Values
    ''' </summary>
    Public Overloads Function GetCountValues(ByVal LCDATEValue As Date,
                                             ByVal SearchTerm As String) As Integer
        Dim x = From p In myTable.AsEnumerable
                Where p.LCDATE =
                    LCDATEValue _
                    And p.TERMCD.Contains(SearchTerm) 'Order By p.AGENT
                Group p By p.LCDATE Into Group
                Select New With {.LCDATE = LCDATEValue, .FunctionValue = Group.Count()}
        If x.Any = True Then
            Return x.ElementAt(0).FunctionValue
        Else
            Return 0
            ' Dim NewEntry = New With {.CAMPAIGNID = CampaignIDValue, .Agent = AgentValue, .FunctionValue = 0}
            'x = NewEntry
            ' Dim Copy = x.Append(NewEntry)
            'Return Copy

        End If
    End Function
End Class

Ответы [ 2 ]

2 голосов
/ 13 февраля 2020

Имена переменных параметров не имеют значения для подписи!

Мы должны иметь возможность вызывать такие функции:

result = GetCountValues("string1", "string2")

Если вы есть две перегрузки функции, которые соответствуют этому и отличаются только именами аргументов, нет никакого способа узнать, какой из них вы имеете в виду. Поэтому для рассматриваемого класса эти два метода конфликтуют друг с другом:

Public Overloads Function GetCountValues(ByVal CampaignIDValue As String,
                                         ByVal SearchTerm As String) As Integer

Public Overloads Function GetCountValues(ByVal AgentValue As String,
                                         ByVal SearchTerm As String) As Integer

Возможно, и другие тоже. Я перестал смотреть в этот момент.

0 голосов
/ 13 февраля 2020

Если это только две сигнатуры функций в системе для GetCountValues, и вы не перегружаете третью функцию, которая уже существует с таким именем в родительском классе, просто объявите функции следующим образом:

Public Function GetCountValues(ByVal CampaignIDValue As String, ByVal SearchTerm As String) As Integer

    Return GetCountValues(CampaignIDValue, SearchTerm, String.Empty)

End Function

Public Function GetCountValues(ByVal CampaignIDValue As String,
                               ByVal SearchTerm As String,
                               ByVal AgentValue As String) As Integer

    ' The actual code.

End Function

Привыкайте также ставить параметры в одном и том же порядке.

РЕДАКТИРОВАТЬ:

Как я могу видеть в вашем отредактированном вопросе (и, как уже указывал Джоэл Коухорн) out), у вас есть функции с одинаковой сигнатурой (например, два параметра типа String).

...