您可以避免使用proprty初始值设定项,并将所有代码移到构造函数中,如果有很多属性,则使用可选参数。这样,您将获得种类初始化构造函数,但仍然可以在完成初始化后验证该类。这样的事情:
class Foo
{
public string Foo {get; set;}
public string Bar {get; set;}
public bool IsValid {get ; set;}
private void Validation()
{
if(foo == "")
IsValid = false;
if ...
}
public void Foo(string foo = string.Empty, string bar = string.Empty)
{
Foo = foo;
Bar = bar;
Validation();
}
}
.....
var t = new Foo (Foo = "SomeString");
缺点是,这是相对较新的C#4语法。
如果您不能使用c#4,您可以使用属性访问器来启用验证,例如,像:
public string Foo
{
get { return foo; }
set
{
foo = value;
Validation();
}
}
但这会评估每个组的有效性,如果一次设置很多的属性可能很慢。你也可以使用get
访问上结合一些延迟加载,这样的:
public bool IsValid
{
get
{
if (!isValidated)
Validation();
return isValid;
}
private set { isValid = value; }
}
public string Foo
{
get { return foo; }
set
{
foo = value;
isValidated := false;
}
}
我认为构造函数被调用,虽然你不想要 – 2011-02-10 15:33:19