代码之家  ›  专栏  ›  技术社区  ›  user438034

代码契约:处理泛型抽象类时的ContractClassFor?[副本]

  •  5
  • user438034  · 技术社区  · 16 年前

    所以,我有点小问题。

    假设我有:

    public class Repository<TEntity>
        where TEntity : class
    {
        public abstract void Add(TEntity entity);
    
        // ...and so on...
    }
    

    现在我要定义一个契约类,如下所示:

    public class RepositoryContracts<TEntity> : Repository<TEntity>
        where TEntity : class
    {
        public void Add(TEntity entity)
        {
            Contract.Requires(entity != null);
        }
    
        // ...etc...
    }
    

    现在,我必须用ContractClassAttribute和ContractClassForAttribute标记这些类。问题是,这行不通:

    [ContractClassFor(typeof(Repository<TEntity>))] // what is TEntity?! error!
    

    所以,问题归结为:当这两个类是通用的时,如何使用这些属性将它们链接在一起?

    1 回复  |  直到 16 年前
        1
  •  5
  •   Community Mohan Dere    9 年前

    原来这是 this question ,有点。

    typeof(Repository<>)语法似乎对我不起作用,但结果是typeof(Repository<,>)起了作用,因为有两个类型参数。

    the previous one .