Методы расширения прямоугольника в C#
В этом примере показано, как добавить методы расширения прямоугольника в структуры Rectangle и RectangleF.
Структуры Rectangle и RectangleF имеют несколько полезных свойств для определения их геометрии, таких как Left, Right, Top и Bottom, но у них нет средних свойств. Следующий код добавляет к этим структурам методы MidX и MidY, чтобы ваш код мог легко находить средние значения.
public static class RectangleExtensions { public static int MidX(this Rectangle rect) { return rect.Left + rect.Width / 2; } public static int MidY(this Rectangle rect) { return rect.Top + rect.Height / 2; } public static Point Center(this Rectangle rect) { return new Point(rect.MidX(), rect.MidY()); } public static float MidX(this RectangleF rect) { return rect.Left + rect.Width / 2; } public static float MidY(this RectangleF rect) { return rect.Top + rect.Height / 2; } public static PointF Center(this RectangleF rect) { return new PointF(rect.MidX(), rect.MidY()); } }
Эти методы содержатся в статическом классе RectangleExtensions. Они просто вычисляют координаты середины X и Y и возвращают их. Методы Center возвращают значения Point и PointF, дающие центры прямоугольников.
Вы можете легко выполнить эти вычисления, когда они вам понадобятся, но поместить их в методы расширения делает их немного проще в использовании и делает ваш код более удобным для чтения. Следующий код показывает, как обработчик события Paint программы рисует фигуры, показанные на рисунке.
private void Form1_Paint(object sender, PaintEventArgs e) { e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; Rectangle rect = new Rectangle(10, 10, ClientSize.Width - 20, ClientSize.Height - 20); e.Graphics.DrawRectangle(Pens.Red, rect); PointF[] points = { new PointF(rect.MidX(), rect.Y), new PointF(rect.Right, rect.MidY()), new PointF(rect.MidX(), rect.Bottom), new PointF(rect.Left, rect.MidY()), }; e.Graphics.DrawPolygon(Pens.Blue, points); e.Graphics.DrawLine(Pens.Green, rect.Center(), new PointF(0, 0)); }