Герберт Шилдт - C# 4.0: полное руководство
- Название:C# 4.0: полное руководство
- Автор:
- Жанр:
- Издательство:ООО И.Д. Вильямс
- Год:2011
- Город:Москва -- Киев
- ISBN:978-5-8459-1684-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Герберт Шилдт - C# 4.0: полное руководство краткое содержание
В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.
Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию
C# 4.0: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
}
// Перегрузить бинарный оператор +
//для сложения двух объектов типа Nybble,
public static Nybble operator +(Nybble op1, Nybble op2) {
Nybble result = new Nybble();
result.val = op1.val + op2.val;
result.val = result.val & 0xF; // сохранить 4 младших разряда
return result;
}
// Перегрузить бинарный оператор + для сложения
// объекта типа Nybble и значения типа int.
public static Nybble operator +(Nybble op1, int op2) {
Nybble result = new Nybble();
result.val = op1.val + op2;
result.val = result.val & 0xF; // сохранить 4 младших разряда
return result;
}
// Перегрузить бинарный оператор + для сложения
// значения типа int и объекта типа Nybble,
public static Nybble operator +(int op1, Nybble op2) {
Nybble result = new Nybble();
result.val = op1 + op2.val;
result.val = result.val & 0xF; // сохранить 4 младших разряда
return result;
}
// Перегрузить оператор ++.
public static Nybble operator ++(Nybble op) {
Nybble result = new Nybble();
result.val = op.val + 1;
result.val = result.val & 0xF; // сохранить 4 младших разряда
return result;
}
// Перегрузить оператор >.
public static bool operator >(Nybble op1, Nybble op2) {
if (op1.val > op2.val) return true;
else return false;
}
// Перегрузить оператор <.
public static bool operator <(Nybble op1, Nybble op2) {
if (op1.val < op2.val) return true; else return false;
}
// Преобразовать тип Nybble в тип int.
public static implicit operator int(Nybble op) {
return op.val;
}
// Преобразовать тип int в тип Nybble,
public static implicit operator Nybble(int op) {
return new Nybble(op);
}
}
class NybbleDemo {
static void Main() {
Nybble a = new Nybble(1);
Nybble b = new Nybble(10);
Nybble с = new Nybble();
int t;
Console.WriteLine("a: " + (int)a);
Console.WriteLine("b: " + (int)b);
if (a < b) Console.WriteLine("а меньше b");
// Сложить два объекта типа Nybble.
с = a + b;
Console.WriteLine("с после операции с = а + b: " + (int)с);
// Сложить значение типа int с объектом типа Nybble,
a += 5;
Console.WriteLine("а после операции а += 5: " + (int)a);
Console.WriteLine();
// Использовать тип Nybble в выражении типа int.
t = a * 2 + 3;
Console.WriteLine("Результат вычисления выражения а * 2 + 3: " + t);
Console.WriteLine();
// Продемонстрировать присваивание значения типа int и переполнение,
a = 19;
Console.WriteLine("Результат присваивания а = 19: " + (int)a);
Console.WriteLine();
// Использовать тип Nybble для управления циклом.
Console.WriteLine("Управление циклом for " +
"с помощью объекта типа Nybble.");
for (a = 0; a < 10; a++)
Console.Write((int)a + " ");
Console.WriteLine();
}
}
При выполнении этой программы получается следующий результат.
а: 1
b: 10
а меньше b
с после операции с = а + b: 11
а после операции а += 5: 6
Результат вычисления выражения а * 2 + 3: 15
Результат присваивания а = 19: 3
Управление циклом for с помощью объекта типа Nybble.
0123456789
Большая часть функций класса Nybble
не требует особых пояснений. Тем не менее необходимо подчеркнуть ту особую роль, которую операторы преобразования играют в интегрировании класса типа Nybble
в систему типов С#. В частности, объект типа Nybble
можно свободно комбинировать с данными других типов в арифметических выражениях, поскольку определены преобразования объекта этого типа в тип int и обратно. Рассмотрим для примера следующую строку кода из приведенной выше программы.
t = а * 2 + 3;
В этом выражении переменная t и значения 2 и 3 относятся к типу int
, но в ней присутствует также объект типа Nybble
. Оба типа оказываются совместимыми благодаря неявному преобразованию типа Nybble
в тип int
. В данном случае остальная часть выражения относится к типу int
, поэтому объект а преобразуется в тип int
с помощью своего метода преобразования.
А благодаря преобразованию типа int
в тип Nybble
значение типа int
может быть присвоено объекту типа Nybble
. Например, в следующей строке из приведенной выше программы:
а = 19;
сначала выполняется оператор преобразования типа int
в тип Nybble
. Затем создается новый объект типа Nybble
, в котором сохраняются 4 младших разряда целого значения 19, а по существу, число 3, поскольку значение 19 превышает диапазон представления чисел для типа Nybble
. Далее этот объект присваивается переменной экземпляра а. Без операторов преобразования подобные выражения были бы просто недопустимы.
Кроме того, преобразование типа Nybble
в тип Nybble
используется в цикле for
. Без такого преобразования организовать столь простой цикл for было бы просто невозможно.
--------------------------------
ПРИМЕЧАНИЕ
В качестве упражнения попробуйте создать вариант полубайтового типа Nybble, предотвращающий переполнение, если присваиваемое значение оказывается за пределами допустимого диапазона чисел. Для этой цели лучше всего сгенерировать исключение. (Подробнее об исключениях — в главе 13.)
--------------------------------
ГЛАВА 10 Индексаторы и свойства
В этой главе рассматриваются две особые и тесно связанные друг с другом разновидности членов класса: индексаторы и свойства. Каждый из них по-своему расширяет возможности класса, способствуя более полной его интеграции в систему типов C# и повышая его гибкость.
В частности, индексаторы предоставляют механизм для индексирования объектов подобно массивам, а свойства — рациональный способ управления доступом к данным экземпляра класса. Эти члены класса тесно связаны друг с другом, поскольку оба опираются на еще одно доступное в C# средство: аксессор.
Индексаторы
Как вам должно быть уже известно, индексирование массива осуществляется с помощью оператора [ ]. Для создаваемых классов можно определить оператор [ ], но с этой целью вместо операторного метода создается индексатор, который позволяет индексировать объект, подобно массиву. Индексаторы применяются, главным образом, в качестве средства, поддерживающего создание специализированных массивов, на которые накладывается одно или несколько ограничений. Тем не менее индексаторы могут служить практически любым целям , для которых выгодным оказывается такой же синтаксис, как и у массивов. Индексаторы могут быть одно- или многомерными.
Читать дальшеИнтервал:
Закладка: