用属性扩展密封类

时间:2018-09-02 19:36:30

标签: c#

我想扩展var process = new Process { StartInfo = new ProcessStartInfo { FileName = "mysql.exe", // assumes mysql.exe is in PATH Arguments = "-u root --password=\"some-password\"", RedirectStandardInput = true, UseShellExecute = false }, }; process.Start(); process.StandardInput.Write(File.ReadAllText("some-file.sql")); 类。目前,此类具有属性if (condition){ //we can write like this in c++ } Rectangle,...,我想添加属性leftright,...

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

topLeft

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

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

但是Rectangle是一个密封的类。

  

不能从密封类型“矩形”派生

因此无法扩展此类?

1 个答案:

答案 0 :(得分:5)

您可以使用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继承,但是可以将其用作构造函数参数。而且,如果您不想覆盖其他行为,只需使用Rectangle将它们委托给_rect,例如:

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