我只是在阅读Bosque编程语言的文档,偶然发现section 12有关错误和检查
我想知道C#是否具有与发布和前提条件类似的概念。 乍一看,我认为这看起来像是保护子句,但是从语言的角度来看,根本没有进入这些前提条件的方法。
由于文档是相当新的,因此我将在此处发布我正在谈论的源代码:
entity Foo {
field x: Int;
invariant x > 0; //check whenever a Foo is constructed
method m(y: Int): Int
requires y >= 0; //precondition
ensures _result_ > 0; //postcondition
{
check this.x - y > 0; //sanity check - enabled on optimized builds
assert this.x * y != 0; //diagnostic assert - only for test/debug
return x * y;
}
}
在C#中,我通常会这样写
internal class Foo
{
private int x;
public int m(int y)
{
if(y<0) //Negative guard clause
{
//throw an exception
}
//Assertions
int result = x * y;
if(result<0)
{
//throw an exception
}
return result;
}
}
在撰写此问题时,我遇到了C#中的代码契约,其行为与看似保护子句的行为类似。在我看来,C#中的Contract.Requires
更像方法内部的check
和assert
语句。
所以我的问题是: 在输入方法之前或之后出现后置条件的情况下,是否存在类似的概念?