Герберт Шилдт - C# 4.0: полное руководство

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.
Описание книги "C# 4.0: полное руководство"
Описание и краткое содержание "C# 4.0: полное руководство" читать бесплатно онлайн.
В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.
Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию
Для того чтобы воспользоваться методом CompareTo(), необходимо указать ограничение, которое требуется наложить на аргумент типа для реализации обобщенного интерфейса IComparable<T>. А затем достаточно вызвать метод CompareTo(), чтобы сравнить два экземпляра параметра типа.
Ниже приведен пример применения обобщенного интерфейса IComparable<T>. В этом примере вызывается метод InRange(), возвращающий логическое значение true, если объект оказывается среди элементов отсортированного массива.
// Требуется обобщенный интерфейс 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(obs[obs.Length-1]) > 0) return false;
return true;
}
В приведенном ниже примере программы демонстрируется применение обоих методов IsIn() и InRange() на практике.
// Продемонстрировать применение обобщенных
// интерфейсов IComparable<T> и IEquatable<T>.
using System;
// Теперь в классе MyClass реализуются обобщенные
// интерфейсы IComparable<T> и IEquatable<T>.
class MyClass : IComparable<MyClass>, IEquatable<MyClass> {
public int Val;
public MyClass(int x) {
Val = x;
}
// Реализовать обобщенный интерфейс IComparable<T>.
public int CompareTo(MyClass other) {
return Val - other.Val; // Now, no cast is needed.
}
// Реализовать обобщенный интерфейс IEquatable<T>.
public bool Equals(MyClass other) {
return Val == other.Val;
}
// Переопределить метод Equals(Object).
public override bool Equals(Object obj) {
if (obj is MyClass)
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(obs[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 (IsIn(99, nums))
Console.WriteLine("He подлежит выводу.");
// Применить метод Isln() к объектам класса MyClass.
MyClass[] mcs = { new MyClass(1), new MyClass(2),
new MyClass(3), new MyClass(4) };
if (IsIn(new MyClass(3), mcs))
Console.WriteLine("Найден объект MyClass(3).");
if (IsIn(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("Значение 0 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>.
-----------------------------------
Иерархии обобщенных классов
Обобщенные классы могут входить в иерархию классов аналогично необобщенным классам. Следовательно, обобщенный класс может действовать как базовый или производный класс. Главное отличие между иерархиями обобщенных и необобщенных классов заключается в том, что в первом случае аргументы типа, необходимые обобщенному базовому классу, должны передаваться всеми производными классами вверх по иерархии аналогично передаче аргументов конструктора.
Применение обобщенного базового класса
Ниже приведен простой пример иерархии, в которой используется обобщенный базовый класс.
// Простая иерархия обобщенных классов,
using System;
// Обобщенный базовый класс,
class Gen<T> {
T ob;
public Gen(T о) {
ob = о;
}
// Возвратить значение переменной ob.
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!
Похожие книги на "C# 4.0: полное руководство"
Книги похожие на "C# 4.0: полное руководство" читать онлайн или скачать бесплатно полные версии.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Отзывы о "Герберт Шилдт - C# 4.0: полное руководство"
Отзывы читателей о книге "C# 4.0: полное руководство", комментарии и мнения людей о произведении.