netlib.narod.ru | < Назад | Оглавление | Далее > |
Точка на координатной плоскости (coordinate point) — довольно распространенный в графических средах тип данных. Он невелик, поэтому для него больше подходит использование структуры, а не класса. В .NET Framework это структура Point. В двумерной координатной системе (такой как поверхность видеодисплея или лист бумаги принтера) точка обозначается обычно парой чисел (x, y), где х — координата по горизонтали, a y — координата по вертикали. В главе 2 я рассказал о системе координат, определенной в Windows Forms, но тип данных Point не связан с какой-нибудь конкретной системой координат. Его можно использовать в любой двумерной системе координат.
Структура Point имеет два доступных для чтения и записи свойства, X и Y, которые определены, как 32-битные целые числа. X и Y могут быть отрицательными. Хотя Point — структура, а не класс, вы не сможете просто определить переменную типа Point и присвоить значения этим двум свойствам:
Point pt; pt.X = 23; // Компилятор сообщит об ошибке! pt.Y = 47;
Вы получите сообщение компилятора «Use of unassigned local variable» (использование неопределенной локальной переменной). По-прежнему нужно использовать new для создания экземпляра структуры или класса. При объявлении:
Point pt = new Point();
свойствам X и Y присваивается начальное значение 0. Затем им можно присвоить конкретные значения:
pt.X = 23; pt.Y = 47;
Или использовать такое объявление для инициализации свойств:
Point pt = new Point(34, 55);
Или, в редких случаях побитовой упаковки в .NET Framework, можно указать две координаты как 16-битные значения, объединенные в 32-битное целое, например:
Point pt = new Point(0x01000010);
В результате этого объявления свойство X получит значение 16 (0x0010), а свойство Y — 256 (0x0100). Я не советую рассматривать точки как 32-битные целые; такое объявление в основном полезно людям, вынужденным продолжать использовать функции Win32 API, иногда работающие с упакованными координатами.
Единственный случай, когда можно обойтись без new, — использование метода, свойства или поля, возвращающего Point. На самом деле структура Point заключает один такой элемент в себе. Это статическое поле Empty:
Point pt = Point.Empty;
Заметьте, что Point с заглавной буквы в правой части оператора означает саму структуру Point, а не экземпляр структуры Point. Указать тип Point необходимо, так как поле Empty — статическое. В результате выполнения этого оператора X и Y получат нулевые значения. Кроме того, в Point имеется неизменяемое свойство IsEmpty, возвращающее true, если оба свойства X и Y равны 0.
Вот полный список свойств Point:
Свойства Point
Тип | Свойство | Доступ |
int | X | Чтение/запись |
int | Y | Чтение/запись |
bool | IsEmpty | Чтение |
Point наследует метод GetType от Object, переопределяет методы GetHasbCode, ToString, Equals из Object, унаследованные от Object через ValueType, и содержит свой метод Offset. Вот полный список открытых методов экземпляра (т. е. нестатических) структуры Point:
Методы экземпляра Point
Type GetType() |
int GetHasnCode() |
string ToString() |
bool Equals(Point point) |
void Offset{int dx, int dy) |
О трех статических методах структуры Point я расскажу попозже.
Метод ToString преобразует объект Point в строку символов, доступную для чтения. Например, после выполнения инструкций:
Point pt = new Point(5, 201); string str = pt.ToString();
переменной str присваивается текстовая строка {Х=5,Y=201}. Метод ToString вызывается Console.Write, Console.WriteLine и String.Format для преобразования объектов в строки.
Метод Equals проверяет, равны ли две точки друг другу, как, например, в инструкции:
if (pt1.Equals(pt2))
Под равенством точек подразумевается, что свойства X и Y двух объектов Point, равны друг другу. Однако в С# удобнее применять такой оператор равенства:
if (pt1 == pt2)
Метод Equals предназначен для языков, не поддерживающих операторы равенства. Кроме того, со структурами Point можно использовать оператор неравенства:
if (pt1 != pt2)
Метод Offset:
pt.Offset(21, -12);
в основном является тем же самым, что и прибавление двух смещений к свойствам:
pt.X += 21; pt.Y += -12;
netlib.narod.ru | < Назад | Оглавление | Далее > |