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を使用できない場合は、プロパティアクセサーを使用して検証を有効にすることができます。
しかし、これは各セットの妥当性を評価します。一度に多数のプロパティを設定すると時間がかかることがあります。あなたはまた、いくつかの遅延ロードと組み合わせでこのような何かを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;
}
}
私は思っていませんが、コンストラクタが呼び出されたと思います。 –
コンストラクタでこれを行うことができないという明白な理由がわかりません。それを明確にすることはできますか? –
私はそれがプロパティイニシャライザのためだと思う... – SWeko