我最近发现了.NET Contracts API,虽然我不喜欢使用方法实现的方式,而不是扩展语法(Sing#在我看来是对的) ,我更喜欢用旧的/常规的方法,比如使用if空检查。Contract.Ensures和异常处理
我也在接近我的第一份Contract.Ensures-calls,我偶然发现如何处理包含Contract.Ensures的方法中的异常,该方法在运行时遭遇异常?
合同一词。 确保有点觉得我必须处理方法内部的异常,并让我的类再次进入正确的状态,但如果我不能呢?
比方说,我们有这个类在这里:
public class PluginManager
{
private ILoadedFromAtCompileTimeUnknownAssembly extension;
public bool IsFinished { get; private set; }
public void Finish()
{
extension.Finish();
this.IsFinished = true;
}
}
我们可以使用Contract.Ensures确保IsFinished是true,该方法完成后?
您使用合约来防止您的班级进入错误的状态。它没有完成,因为你的合同说它没有正确完成。所以不要将它设置为* true *。实际上从这个恢复是不太可能的,不要尝试。记录异常,终止程序,修复错误。 –
@HansPassant什么是我只能从包装类获得的属性?例如在例如“Contract.Ensures(Loader.Count == 0)”中。 'UnloadAll(){Loader.UnloadAll(); }'? –