このクラスを考えてみましょう:
[Persistable]
public sealed class FileMoveTask : TaskBase
{
[PersistMember]
public string SourceFilePath { get; private set;}
[PersistMember]
public string DestFilePath { get; private set;}
public FileMoveTask(string srcpath, string dstpath)
{
this.SourceFilePath = srcpath;
this.DestFilePath = dstpath;
//possibly other IMPORTANT initializations
}
//code
}
すべてのメンバーを attribute でシリアル化することにより、このクラスのオブジェクトを永続化できますPersistMember
。しかし、逆シリアル化プロセス中にいくつかの問題 (設計上の問題) に直面しています。特に、問題はコンストラクターに存在する可能性のある「おそらく他の重要な初期化」にあり、プログラマーは、おそらくそれが意味をなさないために、少数のメンバーを永続化しない (つまり、メンバーに追加しない)ことを決定する場合があります。PersistMember
このような状況では、オブジェクトを元の状態とまったく同じ状態に逆シリアル化するにはどうすればよいでしょうか? この質問は、要約すると次のようになると思います。以前に渡されたのと同じ引数を渡して、デフォルト以外のコンストラクターを呼び出すにはどうすればよいでしょうか。それを行う方法はありますか?コンパイラによって強制できるルールをいくつか作成できますか (一種のメタプログラミング)? コンストラクター属性はここで役立ちますか?