1

Skeet の記事を読んだ後、私は一般的なアドバイスに従いました。

しかし、あいまいさをもう少し理解したいと思います(そして、オーバーロードを維持できるかどうかを確認してください!)

これらは、さまざまなフレーバーのビュー モデルを最初に有効または無効の状態にする必要があるかもしれない退屈なテストの一部をスタブ化するのに役立つテスト ヘルパーの一部です。

私は、継承関係を持たない 2 つのビュー モデルでこれらのヘルパーを使い始めましたが、うまく機能しました。

次に、他のビュー モデル タイプの基本クラスである ViewModelWrapper の別のオーバーロードに別のものが役立つと判断しました。そのため、コンパイラは、以前に動作していた VmWrapper のサブクラスに使用する拡張機能がわからないと不平を言いました。

この場合、これが 3 番目のオーバーロードであり、以下のコードの 1 番目です。私がほのめかしたように、私はすでに過負荷をなくしましたが、

これらを過負荷として機能させ続ける方法を誰かが見ていますか?

乾杯、
ベリル

// SatVm
public static void MakeValid<TParentModel, TModel>(this ISatelliteVm<TParentModel, TModel> instance, IEntityValidator validator) {...}

// HubVm
public static void MakeValid<TParentModel>(this HubViewModel<TParentModel> instance, IEntityValidator validator, bool bValid = true)
where TParentModel : Entity {   ... }

// VmWrapper    
public static void MakeValid<TModel>(this ViewModelWrapper<TModel> instance, IEntityValidator validator) { ... }
4

1 に答える 1

2

vm の種類ごとに、拡張機能のセットごとに個別の名前空間を使用するだけです。

namespace Extensions.Satellite
{
    // SatVm
    public static void MakeValid<TParentModel, TModel>(this ISatelliteVm<TParentModel, TModel> instance, IEntityValidator validator) {...}
}

namespace Extensions.Hub
{
    // HubVm
    public static void MakeValid<TParentModel>(this HubViewModel<TParentModel> instance, IEntityValidator validator, bool bValid = true)
        where TParentModel : Entity {   ... }
}

namespace Extensions.Wrapper
{
    // VmWrapper    
    public static void MakeValid<TModel>(this ViewModelWrapper<TModel> instance, IEntityValidator validator) { ... }
}

次に、正しい名前空間を使用してください。

関連するニュースとして、これをチェックすることをお勧めします:拡張メソッドのオーバーライド

于 2012-10-16T21:06:08.090 に答える