Warum erfordert IComparer, dass Sie IComparer.Compare (Objekt x, Objekt y) definieren und nicht nur vergleichen (Objekt x, Objekt y)?

8

Ich bin ziemlich neu in C # (6 Monate Berufserfahrung), aber es scheint ziemlich ähnlich zu Java zu sein, so dass ich mich sofort zuhause fühle.

Heute habe ich jedoch versucht, das IComparer-Interface zu implementieren und habe mich gefragt, warum es mir einen Fehler gab:

%Vor%

Es sieht so aus, als ob Sie es wie folgt implementieren müssen:

%Vor%

Ich habe nichts in der Schnittstellendeklaration bemerkt, das dies erfordern würde, und es sieht so aus, als ob Sie das in C # normalerweise nicht tun müssen.

Weiß jemand warum?

    
RickySpanish 27.10.2016, 09:55
quelle

1 Antwort

9
  

Warum verlangt IComparer, dass Sie IComparer.Compare (Objekt x, Objekt y) definieren und nicht nur vergleichen (Objekt x, Objekt y)?

Es tut es nicht. Die vollständige Fehlermeldung lautet:

  

'AlphabeticalReportSort' implementiert das Schnittstellenelement 'IComparer.Compare (Objekt, Objekt)' nicht. 'AlphabeticalReportSort.Compare (Objekt, Objekt)' kann kein Schnittstellenmitglied implementieren, da es nicht öffentlich ist.

Beachten Sie den zweiten Satz. Ihre int Compare() -Methode ist privat, nicht öffentlich und kann daher nicht als Implementierung der Schnittstellenmethode dienen.

int IComparer.Compare() ist eine explizite Implementierung und wird kompiliert, da explizite Schnittstellenimplementierungen immer öffentlich sind (da alle Schnittstellenmitglieder öffentlich sind) und daher den Zugriffsmodifizierer nicht benötigen. In Ihrem Fall ist es jedoch ausreichend, Ihre Methode öffentlich zu markieren. In sehr seltenen Fällen müssen Sie eine Interface-Methode explizit implementieren, und soweit ich weiß, können Sie dies in der Schnittstellendefinition selbst nicht wirklich benötigen.

    
BoltClock 27.10.2016, 10:03
quelle

Tags und Links