gpt4 book ai didi

c# - 使用属性扩展密封类

转载 作者:行者123 更新时间:2023-12-02 15:50:50 25 4
gpt4 key购买 nike

我想扩展矩形类。目前,此类具有属性 leftright、...,我想添加属性 topLefttopRight >,...

我知道我可以创建一些扩展方法,例如

public static Point TopLeft(this Rectangle rect)
{
return new Point(rect.Left, rect.Top);
}

但我想将其添加为属性。我考虑过继承Rectangle并添加缺少的信息

internal class Rect : Rectangle
{
public Point TopLeft
{
get
{
return new Point(X, Y);
}
}

public Point TopRight
{
get
{
return new Point(X + Width, Y);
}
}
}

但是矩形是一个密封类。

cannot derive from sealed type 'Rectangle'

那么不可能扩展这个类吗?

最佳答案

您可以使用adapter pattern :

internal class RectAdapter
{
private Rect _rect;

public RectAdapter(Rectangle rect)
{
_rect = rect;
}

public Point TopLeft
{
get
{
return new Point(_rect.X, _rect.Y);
}
}

public Point TopRight
{
get
{
return new Point(_rect.X + _rect.Width, _rect.Y);
}
}
}

您不能从 Rectangle 继承,但可以将其作为构造函数参数。如果您不想覆盖其他行为,只需使用 _rect 将它们委托(delegate)给 Rectangle,例如:

public void Intersect(Rectangle rect) => _rect.Intersect(rect);

关于c# - 使用属性扩展密封类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52140435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com