【发布时间】:2015-06-02 23:43:20
【问题描述】:
假设我们与合约类有如下接口
[ContractClassFor(typeof(Custom))]
public abstract class CustomContract : Custom
{
public string GetPerson(int i)
{
Contract.Requires(i > 0);
Contract.Ensures(!String.IsNullOrEmpty(Contract.Result<string>()));
return default(string);
}
public string Name { get; set; }
}
[ContractClass(typeof(CustomContract))]
public interface Custom
{
string GetPerson(int i);
string Name { get; set; }
}
实现就像
public class CustomProcessor: Custom
{
public CustomProcessor(ISomeinterface obj, string logname)
{
if(null == obj) throw new ArgumentNullException(...);
...
}
public GetPerson(int I)
{
...
}
}
用Contract.Requires(obj != null).替换构造函数中的throw new ArgumentNullException有意义吗
合同应该由接口定义,因为构造函数是实现的一部分,而不是接口,所以我倾向于当前的方法。 这是一个好习惯吗?
【问题讨论】:
标签: c# code-contracts contracts