3

私は以前にこれをやったことがあります-トリックを思い出せません。

抽象クラスがある場合:

パブリック抽象クラス

そして派生クラスのセット:

公開授業 写真:ポスト

派生クラスにValidate()というメソッドを強制的に実装させたいのですが、同時にPostレベルでコア検証を提供したいと考えています。

メソッドを作成できます: public abstract void Validate() in Post 、これにより、派生クラスにメソッドの実装が強制されますが、 Post (ベース) 検証を実行するにはどうすればよいですか?

最終結果は、私はこれを行うことができるようにしたいです:

public class BLL
{
   public void AddPost(Post post)
   {
       post.Validate(); // includes "Post" validation, any deriving validation.
       repository.Add(post);
   }
}

どうすればできますか?

4

2 に答える 2

10

これがあなたが望むものです:

public abstract class Post {

    // Default validation technique
    public void Validate()
    {
        // your base validation
        // Then call the specific validation technique
        ExtraValidate();
    }

    // Forces subclasses to provide validation technique
    protected abstract void ExtraValidate();
}

これにより、基本クラスに検証手法が実装され、基本の Validate が外部ユーザーによって呼び出されます。

メソッドを抽象化し、デフォルトの実装を提供することは不可能です。

于 2010-11-18T22:44:41.233 に答える
4

基本クラスでパブリック テンプレート メソッドを作成し、派生クラスの検証メソッドを呼び出すようにします。

public abstract class Post {
    public void Validate() {
        // Post validation
        ValidateDerived();
    }

    protected abstract void ValidateDerived();
}

これにより、派生クラスにメソッドの実装が強制されますが、Post クラスに共通の検証ロジックが提供されます。Validate() は仮想そのものではないことに注意してください。これは、派生クラスに base.Validate() の呼び出しを覚えさせるよりも安全です。

于 2010-11-18T22:48:42.567 に答える