Вы можете избежать использования инициализаторов 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;
}
}