2015-05-19 4 views
5

ich den Fehler: Class 'QueryParameterComparer' must implement 'Function Compare(x As QueryParameter, y As QueryParameter) As Integer' for interface 'System.Collections.Generic.IComparer(Of QueryParameter)'.Fehler, dass ich eine Funktion in einer Klasse implementieren muss, obwohl Funktion definiert ist

Auf dieser Klassendefinition:

Protected Class QueryParameterComparer 
     Implements IComparer(Of QueryParameter) 

     Public Function Compare(x As QueryParameter, y As QueryParameter) As Integer 
      If x.Name = y.Name Then 
       Return String.Compare(x.Value, y.Value) 
      Else 
       Return String.Compare(x.Name, y.Name) 
      End If 
     End Function 

    End Class 

Ich habe auch versucht es voll auszuschreiben:

Protected Class QueryParameterComparer 
     Implements System.Collections.Generic.IComparer(Of QueryParameter) 

     Public Function Compare(x As QueryParameter, y As QueryParameter) As Integer 
      If x.Name = y.Name Then 
       Return String.Compare(x.Value, y.Value) 
      Else 
       Return String.Compare(x.Name, y.Name) 
      End If 
     End Function 

    End Class 

Was fehlt mir?

+3

Implementierung der Schnittstellenmethode erfordert das Schlüsselwort * Implements *. Lassen Sie sich von der IDE helfen, in die Falle des Erfolges zu geraten. Löschen Sie die Funktion, setzen Sie den Cursor nach der Yadayada-Linie und drücken Sie die Eingabetaste. –

+1

Woah! Das habe ich noch nie zuvor gesehen! Ich habe das als Duplikat markiert und dann habe ich gemerkt, dass du vor Jahren die Duplikatsfrage gestellt hast. Lustig ... –

+0

@StevenDoggart: LOL! : S Manche Leute lernen nie? :) Kann diesen Beitrag aber nicht mehr löschen .... – Flo

Antwort

8

Anders als in C#, wobei der Name der Methode nur den einen muss passen immer explizit mit Implements Schlüsselwörter auf jedem Mitglied festgestellt werden, in der Schnittstelle in VB.NET, alle Interface-Implementierungen müssen:

Protected Class QueryParameterComparer 
    Implements IComparer(Of QueryParameter) 

    Public Function Compare(x As QueryParameter, y As QueryParameter) As Integer Implements IComparer(Of QueryParameter).Compare 
     ' ... 
    End Function 
End Class 
3

In VB.Net müssen Sie angeben, welche Methoden die Implementierungsmethoden Ihrer Schnittstellen sind.

Public Function Compare(x As QueryParameter, y As QueryParameter) As Integer Implements System.Collections.Generic.IComparer(Of QueryParameter).Compare 

Es ist seltsam, aber es ermöglicht Ihnen, einen anderen Funktionsnamen für die Implementierung anzugeben. Dies macht es so, dass ein direkter Zugriff auf Ihre Klasse einen Namen für die Funktion haben kann, aber eine Referenz über die Schnittstelle würde den Namen der Schnittstellenmethode haben. Sie können auch die Methode "Privat" angeben, sodass Sie nur über eine Schnittstellenreferenz auf die Methode zugreifen können.

Verwandte Themen