代码契约:ContractClassFor 处理通用抽象类时?

发布于 2024-09-27 11:15:28 字数 705 浏览 0 评论 0原文

所以,我这里有一个小问题。

假设我有:

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!

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

So, I have a little problem here.

Suppose I have:

public class Repository<TEntity>
    where TEntity : class
{
    public abstract void Add(TEntity entity);

    // ...and so on...
}

And now I want to define a contract class, like so:

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

    // ...etc...
}

Now, I'd have to mark these classes with ContractClassAttribute and ContractClassForAttribute. Problem being, this won't work:

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

So, the question boils down to: How do I link these two classes together using those attributes, when they're generic?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

溺ぐ爱和你が 2024-10-04 11:15:28

事实证明,这是

typeof(Repository<>) 语法似乎对我不起作用,但事实证明, typeof(Repository<,>) 可以解决问题,因为有两个类型参数。

结束问题,并向 前一个

Turns out this is a duplicate of this question, kinda.

The typeof(Repository<>) syntax didn't seem to work for me, but turns out, typeof(Repository<,>) does the trick, since there are two type parameters.

Closing the question, and adding a comment to the previous one.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文