4

今日はWPFで作業しています。

System.Windows.Shapes.Line次のように、クラスから継承しようとしました:

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

Lineクラスが封印されていることに今気づきました。

私の目標は、クラスのように機能するクラスを作成することですLine(それを配置するCanvas)が、毎回ブラシを追加してコードを台無しにしたくないので、常に幅2pxの黒いブラシ/ストロークが必要だとしましょう。

私はそれを間違ってやろうとしていると感じています。

どうすればいいですか?

4

2 に答える 2

4

ファクトリ クラスを作成できます。

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

ファクトリも である可能性がありますがstatic、それはテスト容易性を妨げる可能性があります。

このソリューションでは、継承のようにクラスを拡張できないことに注意してください。そのためには、必要な追加のプロパティとともにオブジェクトを埋め込むクラスLineを返す必要があります。MyLineLineMyLine

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
}
于 2013-05-25T01:20:45.223 に答える