我是不是把这个简单的合约实现错了?这是我的代码:publicclassRegularPolygon{publicintVertexCount;公共双边长;publicRegularPolygon(intvertexCount,doublesideLength){Contract.Requires(vertexCount>=3);顶点数=顶点数;SideLengthInvar=sideLength;privatevoidRegularPolygonInvariants(){Contract.Invariant(VertexCount>=3);我尝试使用Contract.Requires和Contract.Invariant方法来防止vertexCount变量小于或等于2;但我仍然能够初始化边缘的TheRegularPolygon。我的(简化的)NUnit测试如下所示:[TestFixture]classTestRegularPolygon{privateRegularPolygon_polygon;[设置]publicvoidInit(){_polygon=newRegularPolygon(1,50);}[测试]publicvoidConstructor(){Assert.That(_polygon.VertexCount,Is.GreaterThanOrEqualTo(3));}}上面的测试也通过了,我想不通为什么!起初我认为ReSharper可能搞砸了,因为当我尝试使用Contract命名空间中的方法时,它会显示带有此消息的行:跳过方法调用。编译器不会生成方法调用,因为该方法是有条件的,或者是没有实现的方法的一部分。但是暂停R#并在NUnit中运行测试具有相同的结果,在VS中也没有错误或警告。所以我认为这只是因为ReSharper还没有强调代码契约兼容性。我检查了文档,据我所知我不应该有这个问题。我是否错误地使用了代码契约,或者我的环境是否以某种方式阻止它工作?谢谢。首先要检查的是——你真的打开了合同检查吗?否则,您的任何合同都不会做任何事情。这也可以解释R#警告。查看构建属性中的“代码合同”,然后查看“运行时检查”。根据评论,确保CONTRACTS_FULL被定义为编译符号——这似乎是R#所需要的。第二点:你有公共可变字段,这意味着你的不变量可以随时被编写polygon.VertexCount=0的人违反;请不要使用公共字段,尤其是不可写字段。?以上是C#学习教程:我是不是把这个简单的合约实现错了?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
