C# 编写关于引发事件的方法的代码契约
我在使用事件的接口上编写代码契约:C# 编写关于引发事件的方法的代码契约,c#,events,code-contracts,C#,Events,Code Contracts,我在使用事件的接口上编写代码契约: 接口事件接口{ 添加事件处理程序项; bool-Add(T项); } 将项添加到实现该接口的集合时,该集合必须引发itemsadded事件。 只有在添加项目时才必须引发事件; 这是由返回值给出的(设想一个集合,其中true表示该项已添加,false表示该项未添加,因为它已存在于集合中) 我希望有一份合同,以确保如果结果是真实的,将提出一个事件。 同样,如果结果为false,则不会引发任何事件。 有没有办法检查是否使用契约?这不是代码契约设计的目的。使用接口约
接口事件接口{
添加事件处理程序项;
bool-Add(T项);
}
将项添加到实现该接口的集合时,该集合必须引发itemsadded
事件。
只有在添加项目时才必须引发事件;
这是由返回值给出的(设想一个集合,其中true
表示该项已添加,false
表示该项未添加,因为它已存在于集合中)
我希望有一份合同,以确保如果结果是真实的,将提出一个事件。
同样,如果结果为false,则不会引发任何事件。
有没有办法检查是否使用契约?这不是代码契约设计的目的。使用接口约定时,只能指定有关接口方法的参数和返回值的详细信息
您可能想要编写一个包含事件逻辑的抽象基类,或者您可以为此设置一些单元测试。您不能“抛出”事件。“Raised”是正确的,您已经使用了它,您应该用它替换“throw”的所有实例。其次,代码契约是一种向调用方保证的方法,如果调用方满足声明的先决条件,那么他们可以期望声明的后决条件(如果有)和对象不变量(如果有)。对象的任何其他“内部”行为(例如引发事件)将完全由您负责,正如Franz所说,这可以通过执行单元和/或集成测试轻松确保。此外,代码契约不是软件测试的替代品。这些工具是互补的,始终需要进行测试以确保软件的质量。