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
.
Читать дальше