【发布时间】:2011-03-10 17:18:15
【问题描述】:
所以我有一个非常简单的类,其中一个字符串作为属性。这个字符串必须有一定的模式。我正在尝试使用代码合同来执行此操作。这个类看起来像这样:
class SimpleClass
{
public Property { get; set; }
public SimpleClass(string prop)
{
Contract.Requires(IsValid(prop));
this.Property = prop;
}
[ContractInvariantMethod]
void ObjectInvariant()
{
Contract.Invariant(IsValid(Property));
}
bool IsValid(string arg)
{
// Use regex to check if arg is a valid string
}
}
非常简单。但是,这会引发一个不可读的异常,并且另一个说“成员 SimpleClass.IsValid 的可见性低于封闭方法 SimpleClass.#ctor(System.String)”。为什么这是非法的?我应该将正则表达式复制/粘贴到这两种方法中吗?这似乎与权利相反。请帮我理解!
【问题讨论】:
-
我认为您必须使用
IsValid方法public才能检查string。 -
@AI-CII 我理解,但这也是一个设计缺陷,将实现细节暴露给消费者。
-
你确定不能删除第一个
Contract.Requires?
标签: c# .net regex code-contracts