gpt4 book ai didi

c# - 如何解决密封类的不可能继承?

转载 作者:太空狗 更新时间:2023-10-30 00:42:13 25 4
gpt4 key购买 nike

今天我在 WPF 工作。

我尝试继承 System.Windows.Shapes.Line 类,如下所示:

class MyLine : System.Windows.Shapes.Line
{
public Ln()
{
this.Stroke = Brushes.Black;
}
}

我刚刚意识到,Line 类是密封的。

我的目标是创建一个类,它将像 Line 类一样工作(将其放在 Canvas 上),但我不想弄乱我的代码每次都添加画笔,假设总是想要 2px 宽度的黑色画笔/描边。

我觉得我做错了。

我应该怎么做?

最佳答案

你可以创建一个工厂类:

public class LineFactory
{
public Line Create(<parameters here>)
{
//create and return a Line object
}
}

工厂也可以是静态的,但这可能会阻碍可测试性。

请注意,此解决方案不允许您像继承那样扩展 Line 类。为此,您需要返回一个 MyLine 类,该类将嵌入一个 Line 对象以及您希望 MyLine 具有的其他属性.

public class MyLine
{
private Line _theBoringOriginal; // composition: "has-a" (vs inheritance "is-a")
public MyLine(Line line)
{
_theBoringOriginal = line;
}

public foo SomeProperty { get; set; }
}

如果只是想扩展 Line 类的方法,则不需要新类,只需在静态类中编写扩展方法即可:

public static foo DoSomethingCool(this Line line, <parameters here>)
{
// whatever
}

关于c# - 如何解决密封类的不可能继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16745476/

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