Герберт Шилдт - 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: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
// Перегрузить унарный оператор ++.
public static ThreeD operator ++(ThreeD op)
{
ThreeD result = new ThreeD();
//возвратить результат инкрементирования
result.x = x + 1;
result.y = y + 1;
result.z = z + 1;
return result;
}
Ниже приведен расширенный вариант предыдущего примера программы, в котором демонстрируется перегрузка унарных операторов - и ++.
// Пример перегрузки бинарных и унарных операторов,
using System;
// Класс для хранения трехмерных координат,
class ThreeD {
int x, y, z; // трехмерные координаты
public ThreeD() { x = y = z = 0; }
public ThreeD(int i, int j, int k) {
x = i;
y = j;
z = k;
}
// Перегрузить бинарный оператор +.
public static ThreeD operator +(ThreeD op1, ThreeD op2) {
ThreeD result = new ThreeD();
/* Сложить координаты двух точек и возвратить результат. */
result.x = op1.x + op2.x;
result.y = op1.y + op2.y;
result.z = op1.z + op2.z;
return result;
}
// Перегрузить бинарный оператор -.
public static ThreeD operator -(ThreeD op1, ThreeD op2) {
ThreeD result = new ThreeD();
/* Обратить внимание на порядок следования операндов: op1 — левый операнд, ор2 — правый операнд. */
result.x = op1.x - op2.x;
result.y = op1.y - op2.y;
result.z = op1.z - op2.z;
return result;
}
// Перегрузить унарный оператор -.
public static ThreeD operator -(ThreeD op) {
ThreeD result = new ThreeD();
result.x = -op.x;
result.y = -op.y;
result.z = -op.z;
return result;
}
// Перегрузить унарный оператор ++.
public static ThreeD operator ++(ThreeD op) {
ThreeD result = new ThreeD();
// Возвратить результат инкрементирования,
result.x = op.x + 1;
result.y = op.y + 1;
result.z = op.z + 1;
return result;
}
// Вывести координаты X, Y, Z.
public void Show() {
Console.WriteLine(x + ", " + y + ", " + z);
}
}
class ThreeDDemo {
static void Main() {
ThreeD a = new ThreeD(1, 2, 3);
ThreeD b = new ThreeD(10, 10, 10);
ThreeD c = new ThreeD();
Console.Write("Координаты точки a: ");
a.Show();
Console.WriteLine();
Console.Write("Координаты точки b: ");
b.Show();
Console.WriteLine();
c = a + b; // сложить координаты точек а и b
Console.Write("Результат сложения a + b: ");
c.Show();
Console.WriteLine();
c = a + b + c; // сложить координаты точек a, b и с
Console.Write("Результат сложения a + b + с: ");
c.Show();
Console.WriteLine();
c = c - a; // вычесть координаты точки а
Console.Write("Результат вычитания с - а: ");
c.Show();
Console.WriteLine();
c = c - b; // вычесть координаты точки b
Console.Write("Результат вычитания с - b: ");
c.Show();
Console.WriteLine();
c = -a; // присвоить точке с отрицательные координаты точки
Console.Write("Результат присваивания -а: ");
c.Show();
Console.WriteLine();
c = a++; // присвоить точке с координаты точки а,
// а затем инкрементировать их
Console.WriteLine("Если с = а++");
Console.Write("то координаты точки с равны ");
c.Show();
Console.Write("а координаты точки а равны ");
a.Show();
// Установить исходные координаты (1,2,3) точки а
a = new ThreeD(1, 2, 3);
Console.Write("\nУстановка исходных координат точки а: ");
a.Show();
c = ++a; // инкрементировать координаты точки а,
// а затем присвоить их точке с
Console.WriteLine("\nЕсли с = ++а");
Console.Write("то координаты точки с равны "); c.Show();
Console.Write("а координаты точки а равны "); a.Show();
}
}
Вот к какому результату приводит выполнение данной программы.
Координаты точки а: 1, 2, 3
Координаты точки b: 10, 10, 10
Результат сложения а + b: 11, 12, 13
Результат сложения а + b + с: 22, 24, 26
Результат вычитания с - а: 21, 22, 23
Результат вычитания с - b: 11, 12, 13
Результат присваивания -а: -1, -2, -3
Если с = а++
то координаты точки с равны 1, 2, 3
а координаты точки а равны 2, 3, 4
Установка исходных координат точки а: 1, 2, 3
Если с = ++а
то координаты точки с равны 2, 3, 4
а координаты точки а равны 2, 3, 4
Выполнение операций со встроенными в C# типами данных
Для любого заданного класса и оператора имеется также возможность перегрузить сам операторный метод. Это, в частности, требуется для того, чтобы разрешить операции с типом класса и другими типами данных, в том числе и встроенными. Вновь обратимся к классу ThreeD. На примере этого класса ранее было показано, как оператор + перегружается для сложения координат одного объекта типа ThreeDс координатами другого. Но это далеко не единственный способ определения операции сложения для класса ThreeD. Так, было бы не менее полезно прибавить целое значение к каждой координате объекта типа ThreeD. Подобная операция пригодилась бы для переноса осей координат. Но для ее выполнения придется перегрузить оператор + еще раз, как показано ниже.
// Перегрузить бинарный оператор + для сложения объекта
// типа ThreeD и целого значения типа int.
public static ThreeD operator +(ThreeD op1, int op2)
{
ThreeD result = new ThreeD();
result.x = op1.x + op2;
result.у = op1.y + op2;
result.z = op1.z + op2;
return result;
}
Как видите, второй параметр операторного метода имеет тип int. Следовательно, в этом методе разрешается сложение целого значения с каждым полем объекта типа ThreeD. Такая операция вполне допустима, потому что, как пояснялось выше, при перегрузке бинарного оператора один из его операндов должен быть того же типа, что и класс, для которого этот оператор перегружается. Но у второго операнда этого оператора может быть любой другой тип.
Интервал:
Закладка: