Domanda

Ho creato una class Car che deriva dalla classe astratta TransportMeans e implementa un interfaccia PrivateMeans che contiene solo una proprietà:

interface PrivateMean 
{
int capacity { set; get; }
}

Voglio implementare una classe che ordina gli oggetti della classe Car in base alla capacità della proprietà.Voglio farlo utilizzando l ' interfaccia IComparer .

Tuttavia, quando dichiaro una classe CarComparer aggiuntiva come segue:

public class CarComparer : IComparer<Car>
{

    int IComparer<Car>.Comparer(Car obj1, Car obj2)
    {
        PrivateMean t1 = (PrivateMean)obj1;
        PrivateMean t2 = (PrivateMean)obj2;


        if (t1 != null && t2 != null)
        {
            if (t1.capacity >= t2.capacity)
                return 1;
            else return -1;
        }
        else
            throw new ArgumentException("Some Parameter is not a Car!");
    }
}

Ricevo l'errore:

Errore 1 "MeansOfTransport.CarComparer" non implementa il membro di interfaccia "System.Collections.Generic.IComparer.Compare (MeansOfTransport.Car, MeansOfTransport.Car)".

Qual è il problema?

Inoltre non sono autorizzato a utilizzare IComparer senza una definizione del tipo (Auto).Perché?

È stato utile?

Soluzione

Hai

int IComparer<Car>.Comparer(Car obj1, Car obj2)

Probabilmente intendevi

int IComparer<Car>.Compare(Car obj1, Car obj2)

Altri suggerimenti

Possibili problemi:

  • Devi implementare un metodo Compare, ma il tuo si chiama Comparer
  • Il metodo che stai implementando è public, quindi anche il tuo dovrebbe esserlo.Attualmente il tuo metodo non ha modificatori di accesso, quindi per impostazione predefinita sarà internal.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top