В этом методе значение вызывающего объекта сравнивается со значением объекта, определяемого параметром obj. Если значение вызывающего объекта больше, чем у объекта obj, то возвращается положительное значение; если оба значения равны — нулевое значение, а если значение вызывающего объекта меньше, чем у объекта obj, — отрицательное значение.
Обобщенный вариант интерфейса IComparable объявляется следующим об
разом.
public interface IComparable
В данном варианте тип сравниваемых данных передается параметру Т в качестве ар гумента типа. В силу этого объявление метода CompareTo претерпевает изменения и выглядит так, как показано ниже. int CompareTo(Т other)
В этом объявлении тип данных, которыми оперирует метод CompareTo, может быть указан явным образом. Следовательно, интерфейс IComparable обеспечи вает типовую безопасность. Именно по этой причине он теперь считается более пред почтительным в программировании на С#, чем интерфейс IComparable. Интерфейс IEquatable
Интерфейс IEquatable
Этот метод возвращает логическое значение true, если значение вызывающего объекта оказывается равным значению другого объекта other, в противном случае — логическое значение false.
Интерфейс IEquatable реализуется в нескольких классах и структурах среды .NET Framework, включая структуры числовых типов и класс String. Для реализа ции интерфейса IEquatable обычно требуется также переопределять методы Equals(Object) и GetHashCode, определенные в классе Object. Интерфейс IConvertible
Интерфейс IConvertible реализуется в структурах всех типов значений, String и DateTime. В нем определяются различные преобразования типов. Реализовывать этот интерфейс в создаваемых пользователем классах, как правило, не требуется. Интерфейс ICloneable
Реализовав интерфейс ICloneable, можно создать все условия для копирования объекта. В интерфейсе ICloneable определен только один метод, Clone, объявле ние которого приведено ниже. object Clone
В этом методе создается копия вызывающего объекта, а конкретная его реализация зависит от способа создания копии объекта. Вообще говоря, существуют две разно видности копий объектов: полная и неполная. Если создается полная копия, то ко пия совершенно не зависит от оригинала. Так, если в исходном объекте содержится ссылка на другой объект О, то при его копировании создается также копия объекта О. А при создании неполной копии осуществляется копирование одних только членов, но не объектов, на которые эти члены ссылаются. Так, после создания неполной ко пии объекта, ссылающегося на другой объект О, копия и оригинал будут ссылаться на один и тот же объект О, причем любые изменения в объекте О будут оказывать влия ние как на копию, так и на оригинал. Как правило, метод Clone реализуется для получения полной копии. А неполные копии могут быть созданы с помощью метода MemberwiseClone, определенного в классе Object.
Ниже приведен пример программы, в которой демонстрируется применение ин терфейса ICloneable. В ней создается класс Test, содержащий ссылку на объект клас са X. В самом классе Test используется метод Clone для создания полной копии. // Продемонстрировать применение интерфейса ICloneable. using System; class X { public int a; public X(int x) { a = x; } } class Test : ICloneable { public X о; public int b; public Test(int x, int y) { о = new X(x); b = y; } public void Show(string name) { Console.Write("Значения объекта " + name + ": "); Console.WriteLine("о.a: {0}, b: {1}", o.a, b); } // Создать полную копию вызывающего объекта. public object Clone { Test temp = new Test(o.a, b); return temp; } } class CloneDemo { static void Main { Test ob1 = new Test(10, 20); obi.Show("ob1"); Console.WriteLine("Сделать объект ob2 копией объекта оb1."); Test ob2 = (Test) ob1.Clone; ob2.Show("ob2"); Console.WriteLine("Изменить значение оb1.о.а на 99, " + " а значение оb1.b - на 88."); оb1.о.а = 99; оb1.b = 88; оb1.Show("оb1"); ob2.Show("оb2"); } }
Ниже приведен результат выполнения этой программы. Значения объекта оb1: о.а: 10, b: 20 Сделать объект оb2 копией объекта оb1. Значения объекта оb2: о.а: 10, b: 20 Изменить значение оb1.о.а на 99, а значение оb1.b — на 88. Значения объекта оb1: о.а: 99, b: 88 Значения объекта оb2: о.а: 10, b: 20