Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Return Equals((MyClass) obj); return false;




}

// Переопределить метод GetHashCode().

public override int GetHashCode() { return Val.GetHashCode();

}

}

class CompareDemo {

// Требуется обобщенный интерфейс IEquatable<T>.

public static bool IsIn<T>(T what, T[] obs) where T: IEquatable<T> { foreach(T v in obs)

if(v.Equals(what)) // Применяется метод Equals() return true;

Return false;

}

// Требуется обобщенный интерфейс IComparable<T>. В данном методе // предполагается, что массив отсортирован. Он возвращает логическое // значение true, если значение параметра what оказывается среди элементов // массива, передаваемых параметру obs.

public static bool InRange<T>(T what, T[] obs) where T: IComparable<T> { if(what.CompareTo(obs[0]) < 0 ||

what.CompareTo(ob§[obs.Length-1]) > 0) return false; return true;

}

// Продемонстрировать операции сравнения, static void Main() {

// Применить метод Isln() к данным типа int. int[] nums = { 1, 2, 3, 4, 5 };

If(IsIn(2, nums))

Console.WriteLine("Найдено значение 2.");

If(Isln(99, nums))

Console.WriteLine("He подлежит выводу.");

// Применить метод Isln() к объектам класса MyClass.

MyClass[] mcs = { new MyClass(1), new MyClass(2),

new MyClass(3), new MyClass(4) };

If(lsln(new MyClass(3), mcs))

Console.WriteLine("Найден объект MyClass(3).");

If(Isln(new MyClass(99), mcs))

Console.WriteLine("He подлежит выводу.");

// Применить метод InRange() к данным типа int. if(InRange(2, nums))

Console.WriteLine("Значение 2 находится в границах массива nums."); if(InRange(1, nums))

Console.WriteLine("Значение 1 находится в границах массива nums."); if(InRange(5, nums))

Console.WriteLine("Значение 5 находится в границах массива nums."); if(!InRange(0, nums))

Console.WriteLine("Значение О HE находится в границах массива nums."); if(!InRange(6, nums))

Console.WriteLine("Значение 6 HE находится в границах массива nums.");

// Применить метод InRange() к объектам класса MyClass.. if(InRange(new MyClass(2), mcs))

Console.WriteLine("Объект MyClass(2) находится в границах массива nums."); if(InRange(new MyClass(1), mcs))

Console.WriteLine("Объект MyClass(1) находится " +

"в границах массива nums."); if(InRange(new MyClass(4), mcs))

Console.WriteLine("Объект MyClass(4) находится " +

"в границах массива nums."); if(!InRange(new MyClass(0), mcs))

Console.WriteLine("Объект MyClass(0) HE " +

"находится в границах массива nums."); if(!InRange(new MyClass(5), mcs))

Console.WriteLine("Объект MyClass(5) HE " +

"находится в границах массива nums.");

}

}

Выполнение этой программы приводит к следующему результату.

Найдено значение 2.

Найден объект MyClass (3).

Значение 2 находится в границах массива nums.

Значение 1 находится в границах массива nums.

Значение 5 находится в границах массива nums.

Значение 0 НЕ находится в границах массива nums

Значение 6 НЕ находится в границах массива nums

Объект MyClass(2) находится в границах массива nums.

Объект MyClass(1) находится в границах массива nums.

Объект MyClass(4) находится в границах массива nums.

Объект MyClass(0) НЕ находится в границах массива nums.

Объект MyClass(5) НЕ находится в границах массива nums.

ПРИМЕЧАНИЕ

Если параметр типа обозначает ссылку или ограничение на базовый класс, то к экземплярам объектов, определяемых таким параметром типа, можно применять операторы == и! =, хотя они проверяют на равенство только ссылки. А для сравнения значений придется реализовать интерфейс IComparable или же обобщенные интерфейсы IComparable<T> и IEquatable<T>.

Иерархии обобщенных классов

Обобщенные классы могут входить в иерархию классов аналогично необобщенным классам. Следовательно, обобщенный класс может действовать как базовый или производный класс. Главное отличие между иерархиями обобщенных и необобщенных классов заключается в том, что в первом случае аргументы типа, необходимые обобщенному базовому классу, должны передаваться всеми производными классами вверх по иерархии аналогично передаче аргументов конструктора.

Применение обобщенного базового класса





Поделиться с друзьями:


Дата добавления: 2016-12-03; Мы поможем в написании ваших работ!; просмотров: 360 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Студент может не знать в двух случаях: не знал, или забыл. © Неизвестно
==> читать все изречения...

2806 - | 2369 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.