netlib.narod.ru< Назад | Оглавление | Далее >

Двумерные координаты

Точка на координатной плоскости (coordinate point) — довольно распространенный в графических средах тип данных. Он невелик, поэтому для него больше подходит использование структуры, а не класса. В .NET Framework это структура Point. В двумерной координатной системе (такой как поверхность видеодисплея или лист бумаги принтера) точка обозначается обычно парой чисел (xy), где х — координата по горизонтали, 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< Назад | Оглавление | Далее >

Сайт управляется системой uCoz