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

Источник: http://csharphelper.com/blog/2017/06/make-rectangle-extension-methods-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 1,00 из 5)
Adblock
detector