1

C# を紹介する Java プログラマー (初心者) として、既に実装されているメソッドをこのように再抽象化できることを発見しました (この回答のコード) 。

public class D
{
    public virtual void DoWork(int i)
    {
        // Original implementation.
    }
}

public abstract class E : D
{
    public abstract override void DoWork(int i);
}

public class F : E
{
    public override void DoWork(int i)
    {
        // New implementation.
    }
}

これにより、クラス D の元の実装が完全に利用できなくなるわけではなく、サブクラス化 E (メソッドを再抽象化するクラス) を通じてサブクラス化する D のサブクラスでのみ利用できるようになるわけではないことを認識しています。クラス D が生産されていた場合の問題。

それでも、私は疑問に思っています。これはクラス D のコントラクトを変更しているのではなく、サブクラスの MUST override を指定していませんDoWork(int i)か? これは、オープン/クローズの原則に反していませんか?

これによって壊れた実際のコードや理論上のコードさえも持っていないことに注意してください。

4

1 に答える 1

2

コード プラクティスは、C# や Java などのさまざまなプログラミング言語間でほぼ一定のままです。

優れたオブジェクト指向設計をまだ使用していると仮定すると、これを行うことに問題はありません。D最初の具象クラス (この場合) で元の機能を誤って台無しにしないようにしてください。それが私が気をつけたい唯一の問題です。

C# への切り替えに関して言えば、すぐに .NET に夢中になり、どうしてそれなしでやっていたのだろうかと思うことでしょう。

新しい言語で頑張ってください。これが役に立ったことを願っています:)

于 2015-08-29T03:16:03.903 に答える