質問

でも私は、以下のクラス構造のデータにアクセス層:

interface IBehavior<in T>
{
  void Load(T model);
}

class ModelManager<T>
{
  ModelManager(IEnumerable<IBehavior<T>> behaviors) { ... }

  void Load(T model)
  {
    foreach (var behavior in behaviors) {
      behavior.Load(model)
    }
  }
}

これって、さまざまなインターフェイスが私のモデルを実装することができ、再利用可能な行動を取り扱う者にインターフェイス:

interface IUnique { ... }
class UniqueBehavior : IBehavior<IUnique>  { ... }

interface ITimestampable  { ... }
class TimestampableBehavior : IBehavior<ITimestampable> { ... }

のマネージャーが喜んでくれなcontravarianceに IBehavior<T>.

class MyModel : IUnique, ITimestampable { ... }

new ModelManager<MyModel>(new IBehavior<MyModel>[] {
  new UniqueBehavior(),
  new TimestampableBehavior()
});

スーパー.

でも今は、たいてみましょう動作の適用のザリフィは、企業です。私の最初のアイデアを追加する方法 IBehavior<T>:

void ApplyFilters<IEnumerable>(ref IEnumerable<T> models)

...る実施状況に対応できる適用の設定 Where 条項に列挙です。

しかし、"も refパラメータを許可しない型の変異.どうしたらいいのかと悩んの方の実施このような機能を維持しつつ両タイプ安全のcontravariant自然のインタフェース。そのアイデアありがたくお受けいたします。.

役に立ちましたか?

解決

さらにいこう、正確な文脈のない試みたApplyFoldersリょうか?

void ApplyFolders<TEnum>(ref IEnumerable<TEnum> models) where TEnum : T;

他のヒント

私の Ptrクラス.私はこのクラス最近は完全に胸のすべてのものである。純置refキーワードにしよう副作用をオブジェクトのCLR何らかの理由に感じていない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top