3

抽象クラスを使用してジェネリック インターフェイスにコード コントラクトを追加したいのですが、型パラメーターが検証されます。

これが私がやりたいことの例です:

[ContractClass(typeof(ContractsForIRepository<,>))]
public interface IRepository<T, in TId> where T : IEntity
{
    T GetById(TId id);
    T Persist(T entity);
    void Remove(TId id);
}

[ContractClassFor(typeof(IRepository<,>))]
internal abstract class ContractsForIRepository<T, TId> : IRepository<T, TId>
{
    public T GetById(TId id)
    {
        Contract.Requires(id != null);
        return default(T);
    }

    public T Persist(T entity)
    {
        Contract.Requires(entity != null);
        return default(T);
    }

    public void Remove(TId id)
    {
        Contract.Requires(id != null);
    }
}

条件を削除することで、簡単に機能させることができます。

  • public interface IRepository<T, in TId> where T : IEntity
  • public interface IRepository<T, in TId>

でもこれは絶対に守りたい。出来ますか?

4

1 に答える 1