反向扩展类

时间:2014-04-26 04:45:38

标签: c# inheritance static extend rectangles

我正在尝试创建一个“反向”扩展Rectangle的类。我希望能够将这个方法放在课堂上:

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

然后拨打rectangle.RightPoint();并获得返回值。 (XYWidthHeightRectangle)的字段。

这可能吗?或者我是否需要制作这些静态方法,然后将它们传递给Rectangle

3 个答案:

答案 0 :(得分:3)

我认为你需要一个extension method

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();

答案 1 :(得分:3)

您可以使用扩展方法:

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

这将允许您使用它就像它是Rectangle结构的一部分:

Point rightPoint = rect.RightPoint();

答案 2 :(得分:3)

如果要将方法添加到现有类,您的选项是:

  1. 为Rectangle类编写扩展方法。
  2. 从Rectangle类继承,并将您的方法添加到子类。
  3. 将成员直接添加到Rectangle类。
  4. 选项#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();