CodeContracts:如何使用 this() 调用来满足 Ctor 中的 Require?
我正在使用 Microsoft 的 CodeContracts 并遇到了无法解决的问题。 我有一个带有两个构造函数的类:
public Foo (public float f) {
Contracts.Require(f > 0);
}
public Foo (int i)
: this ((float)i)
{}
该示例已简化。 我不知道如何检查第二个构造函数的 f
是否 > 0. 这对于合约来说可能吗?
I'm playing around with Microsoft's CodeContracts and encountered a problem I was unable to solve. I've got a class with two constructors:
public Foo (public float f) {
Contracts.Require(f > 0);
}
public Foo (int i)
: this ((float)i)
{}
The example is simplified. I don't know how to check the second constructor's f
for being > 0. Is this even possible with Contracts?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您只需将前提条件添加到第二个构造函数的主体中即可。
编辑
尝试使用以下代码调用上面的代码:
您将看到在引发常规异常之前引发先决条件。
You can just add the precondition to the second constructor's body.
EDIT
Try calling the code above with:
You will see that the precondition is thrown before the regular Exception is thrown.
我将添加一个静态方法,将 int 转换为 float 并在其中包含
Contract.Requires
。希望这可以帮助。
I would add a static Method that converts the int to the float and include the
Contract.Requires
in there.Hope this helps.