public static Tuple
Create (Tl iteml, Т2 item2, ТЗ item3)
Следует заметить, что данный метод возвращает объект типа Tuple, в котором инкапсулируются члены кортежа iteml , item2 и item3. Вообще говоря, кортежи оказываются полезными в том случае, если группу значений нужно интерпретировать как единое целое. В частности, кортежи можно передавать методам, возвращать из методов или же сохранять в коллекции либо в массиве.
Интерфейсы IComparable и IComparable
Во многих классах приходится реализовывать интерфейс IComparableили IComparable, поскольку он позволяет сравнивать один объект с другим, используя различные методы, определенные в среде .NET Framework. Интерфейсы IComparableи IComparableбыли представлены в главе 18, где они использовались в примерах программ для сравнения двух объектов, определяемых параметрами обобщенного типа. Кроме того, они упоминались при рассмотрении класса Arrayранее в этой главе. Но поскольку эти интерфейсы имеют особое значение и применяются во многих случаях, то ниже приводится их краткое описание.
Интерфейс IComparableреализуется чрезвычайно просто, потому что он состоит всего лишь из одного метода.
int CompareTo(object obj)
В этом методе значение вызывающего объекта сравнивается со значением объекта, определяемого параметром obj. Если значение вызывающего объекта больше, чем у объекта obj, то возвращается положительное значение; если оба значения равны — нулевое значение, а если значение вызывающего объекта меньше, чем у объекта obj , — отрицательное значение.
Обобщенный вариант интерфейса IComparableобъявляется следующим образом.
public interface IComparable
В данном варианте тип сравниваемых данных передается параметру Т в качестве аргумента типа. В силу этого объявление метода CompareTo()претерпевает изменения и выглядит так, как показано ниже.
int CompareTo(Т other)
В этом объявлении тип данных, которыми оперирует метод CompareTo(), может быть указан явным образом. Следовательно, интерфейс IComparableобеспечивает типовую безопасность. Именно по этой причине он теперь считается более предпочтительным в программировании на С#, чем интерфейс IComparable.
Интерфейс IEquatableреализуется в тех классах, где требуется определить порядок сравнения двух объектов на равенство их значений. В этом интерфейсе определен только один метод, Equals(), объявление которого приведено ниже.
bool Equals(Т other)
Этот метод возвращает логическое значение true, если значение вызывающего объекта оказывается равным значению другого объекта other , в противном случае — логическое значение false.
Интерфейс IEquatableреализуется в нескольких классах и структурах среды .NET Framework, включая структуры числовых типов и класс String. Для реализации интерфейса IEquatableобычно требуется также переопределять методы Equals(Object)и GetHashCode(), определенные в классе Object.
Интерфейс IConvertibleреализуется в структурах всех типов значений, Stringи DateTime. В нем определяются различные преобразования типов. Реализовывать этот интерфейс в создаваемых пользователем классах, как правило, не требуется.
Реализовав интерфейс ICloneable, можно создать все условия для копирования объекта. В интерфейсе ICloneableопределен только один метод, Clone(), объявление которого приведено ниже.
object Clone()
В этом методе создается копия вызывающего объекта, а конкретная его реализация зависит от способа создания копии объекта. Вообще говоря, существуют две разновидности копий объектов: полная и неполная. Если создается полная копия, то копия совершенно не зависит от оригинала. Так, если в исходном объекте содержится ссылка на другой объект О, то при его копировании создается также копия объекта О. А при создании неполной копии осуществляется копирование одних только членов, но не объектов, на которые эти члены ссылаются. Так, после создания неполной копии объекта, ссылающегося на другой объект О, копия и оригинал будут ссылаться на один и тот же объект О, причем любые изменения в объекте О будут оказывать влияние как на копию, так и на оригинал. Как правило, метод Clone()реализуется для получения полной копии. А неполные копии могут быть созданы с помощью метода MemberwiseClone(), определенного в классе Object.
Читать дальше