所以我有一个非常简单的类,其中一个字符串作为属性。该字符串必须具有一定的模式。我正在尝试使用代码合同来强制执行此操作。这个类看起来像这样:
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)”。为什么这是非法的?我应该将正则表达式复制/粘贴到这两种方法中吗?这似乎与正确的相反。请帮我理解一下!
另一种方法是避免“原始痴迷”并使用适合您目的的课程,例如:
public SimpleClass(Email address)
{
// no need to check, it must be valid :)
}
...然后将所有验证逻辑封装在 Email 类中。您仍然会遇到有关验证的“字符串格式”问题,但我认为更好的习惯用法是创建一个名为的方法Email.TryParse
,并按照以下方式塑造它int.TryParse
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)