我有一个 C# 中的 MVVM 项目,我想在其中使用代码合同。所以这是我的场景:接口:
public interface IC042_Model
{
void Save(C042 entity);
void Delete(C042 entity);
}
然后我有合同的抽象类:
[ContractClassFor(typeof(IC042_Model))]
internal abstract class C042_Model_Contracts : IC042_Model
{
public void Save(C042 entity)
{
Contract.Requires(entity != null);
}
public void Delete(C042_CondicaoPagamento entity)
{
Contract.Requires(entity != null);
}
}
在另一个项目中,我的模型实现了接口,如果我在任何方法中调用 this.Save(null),都会生成警告。在我的 ViewModel 中,如果我调用上面相同的方法:this.Save(null),不会生成警告,但是当我运行应用程序时,上面的行会引发一个 Contract 异常。
我的方法有什么问题吗?
提前致谢。
我又举了一个例子,我想大家会更容易理解:
我在类库项目中创建了以下类:
public static class StringExtensions
{
public static string TrimAfter(string value, string suffix)
{
Contract.Requires(suffix != (string)null);
Contract.Requires(!string.IsNullOrEmpty(suffix));
Contract.Requires(value != null);
var index = value.IndexOf(suffix);
if (index < 0)
return value;
return value.Substring(0, index);
}
}
当我从如下的 WPF 项目中调用它时:
CodeDigging.StringExtensions.TrimAfter(null, null);
我没有收到关于合同不完整的警告。
那是我的问题,我希望它现在变得更清楚了。
谢谢。