バイナリフォーマッタ
昨日書こうと思ったけど時間がなかったので。
.NET の型は、SerializableAttribute と NonSerializeAttributae を適切に付与するだけで、バイナリフォーマッタが結構簡単にオブジェクトをシリアライズ/デシリアライズしてくれるし、完了イベントやデシリアライズ後のクラスの変更やら、お手軽である。
このバイナリフォーマッタによる自動シリアライズだが、中途半端に CLSCompliant な型を要求するので注意しなければならない。たとえば、C# では言語制約上コンパイルエラーとなるが、.NET のメンバフィールドの名前はフィールドの定義型が異なれば同じ名前にすることができる。*1
[Serializable] public class Test { private int a; private long a; private object a; }
こんな感じのイメージ。これをバイナリフォーマッタに食わせると、"a" という名前で情報を3回登録しようとして失敗するし、他にも Type.GetField(string) の戻り値が FieldInfo[] ではなく FieldInfo なところからして、こういうクラスの作成はプログラム言語がサポートしている場合でも避けたほうがよい。
誰も好き好んでこんなクラス作らないだろうけど。
*1:当然、CLSCompliant ではない型になる