Где я могу найти определение метода CompareTo в IComparable? - PullRequest
0 голосов
/ 29 сентября 2018

Где я могу найти определение метода CompareTo?

В качестве кода ниже я могу использовать метод CompareTo путем реализации интерфейса IComparable.Но я не дал никакого определения для метода CompareTo в моем классе Utilities.Я знаю, что это очень тривиальный вопрос.Но я не понимаю, как класс реализует интерфейс, не предоставив реализацию своего метода.

public class Utilities<T> where T : IComparable
    {
        public T Max(T a, T b)  
        {
            return a.CompareTo(b) > 0 ? a : b;
        }
    }

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Ваш класс Utilities не реализует IComparable.Вы говорите, что T должен реализовывать IComparable.Если бы Utilities должен был реализовать IComparable, это выглядело бы так:

public class Utilities<T> : IComparable

Вам не нужно определять метод CompareTo в Utilities, потому что он должен быть определен в T, чем бы T не было.

Например, вы не можете использовать Foo для T, потому что Foo не реализует IComparable:

class Foo { 
   // you must add a CompareTo method here in order to use Foo as T
   // you must also add ": IComparable"
}

НоВы можете использовать string или int или float, потому что они реализуют IComparable.

0 голосов
/ 29 сентября 2018

Вы используете ограничение общего типа вместо реализации IComparable интерфейса, что означает, что T должен реализовываться из IComparable.

Если вы хотите реализовать IComparable интерфейсвам нужно использовать : после имени класса и перед where ключевым словом ограничения.

public class Utilities<T> : IComparable 
    where T : IComparable

{
    public int CompareTo(object obj)
    {

    }

    public T Max(T a, T b)
    {
        return a.CompareTo(b) > 0 ? a : b;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...