今天我在WPF工作。
我尝试从System.Windows.Shapes.Line
类继承,如下所示:
class MyLine : System.Windows.Shapes.Line
{
public Ln()
{
this.Stroke = Brushes.Black;
}
}
我刚才意识到,Line类是密封的。
我的目标是创建一个类,它将像Line
类一样工作(将它放在Canvas
上),但我不希望每次都添加刷子来弄乱我的代码,让我们说总是想要2px宽的黑色画笔/笔画。
我觉得我试图做错了。
我该怎么做?
答案 0 :(得分:4)
您可以创建工厂类:
public class LineFactory
{
public Line Create(<parameters here>)
{
//create and return a Line object
}
}
工厂也可能是static
,但这可能会阻碍可测试性。
请注意,此解决方案不允许您扩展 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
}
答案 1 :(得分:3)
为什么不简单地创建一个扩展类来做你想做的事情?扩展类是专门创建的,允许您使用新方法扩展密封类,而不必实际继承。
public static class LineExtensions {
// returns the Line so you can use it fluently
public static Line MakeLineBlack(this Line line) {
line.Stroke = Brushes.Black;
return line;
}
}
然后你可以这样做:
var line = new Line().MakeLineBlack();