反向扩展类

本文关键字:扩展 | 更新日期: 2023-09-27 18:00:19

我正在尝试创建一个"反向"扩展Rectangle的类。我想能够把这个方法放在类中:

    public Point RightPoint()
    {
        return new Point(this.X + this.Width, this.Y + this.Height / 2);
    }

然后调用CCD_ 2;并得到返回值。(XYWidthHeightRectangle的字段)。

这可能吗?还是我需要制作这些静态方法,然后向它们传递Rectangle

反向扩展类

我认为您需要一个扩展方法

public static Point RightPoint(this Rectangle rectangle)
{
    return new Point(rectangle.X + rectangle.Width, rectangle.Y + rectangle.Height / 2);
}

上面的代码应该放在static类中。

然后您可以在Rectangle对象上执行此操作:

Rectangle rect = new Rectangle();
Point pointObj = rect.RightPoint();

您可以使用扩展方法:

public static class ExtensionMethods
{
    public static Point RightPoint(this Rectangle rectangle)
    {
        return new Point(rectangle.X + rectangle.Width, rectangle.Y + rectangle.Height / 2);
    }
}

这将允许您使用它,就像它是矩形结构的一部分一样:

Point rightPoint = rect.RightPoint();

如果您想将一个方法添加到现有的类中,您可以选择:

  1. 为Rectangle类编写一个扩展方法
  2. 从Rectangle类继承,并将方法添加到子类中
  3. 将成员直接添加到Rectangle类中

选项#2要求创建一个新类型,选项#3要求您更改类。我推荐这样的扩展方法:

public static Point RightPoint(this Rectangle rect)
{
    return new Point(rect.X + rect.Width, rect.Y + rect.Height / 2);
}

这将允许您拨打您想要的电话:

var rectangle = new Rectangle();
var point = rectangle.RightPoint();