Методы расширения прямоугольника в 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));
}

