用途としては、DataGridView のように列単位で処理や属性を新たに追加したい場合を想定しています。
こういった場合、バイナリフォーマットでリソースに情報を保存したい場合、以下のように実装します。
- クラスに[Serializable]アトリビュートの付与
- バイナリフォーマットでシリアライズ可能
- シリアライズオブジェクトから復元可能なコンストラクタの実装
以下、コード例です。
//-------------------------------------------------
//■とあるコンポーネント
//-------------------------------------------------
public class DataGridValidator : Component
{
private RequiredData[] items = new RequiredData[0];
public RequiredData[] Items
{
get { return items; }
set { items = value; }
}
private DataGridView dataGridView = null;
public DataGridView DataGridView
{
set { dataGridView = value; }
get { return dataGridView; }
}
public DataGridValidator()
: base()
{
}
}
//-------------------------------------------------
//■とあるコンポーネントに集約されているクラス
//-------------------------------------------------
[Serializable]
public class RequiredData : ISerializable
{
private bool required = false;
public bool Required
{
get { return required; }
set { required = value; }
}
private string message = String.Empty;
public string Message
{
get { return message; }
set { message = value; }
}
public RequiredData()
{
}
// シリアライズ用コンストラクタ
public RequiredData(SerializationInfo info, StreamingContext context)
{
Required = info.GetBoolean("Required");
Message = info.GetString("Message");
}
#region ISerializable メンバ
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("Required", Required);
info.AddValue("Message", Message);
}
#endregion
}
//■とあるコンポーネント
//-------------------------------------------------
public class DataGridValidator : Component
{
private RequiredData[] items = new RequiredData[0];
public RequiredData[] Items
{
get { return items; }
set { items = value; }
}
private DataGridView dataGridView = null;
public DataGridView DataGridView
{
set { dataGridView = value; }
get { return dataGridView; }
}
public DataGridValidator()
: base()
{
}
}
//-------------------------------------------------
//■とあるコンポーネントに集約されているクラス
//-------------------------------------------------
[Serializable]
public class RequiredData : ISerializable
{
private bool required = false;
public bool Required
{
get { return required; }
set { required = value; }
}
private string message = String.Empty;
public string Message
{
get { return message; }
set { message = value; }
}
public RequiredData()
{
}
// シリアライズ用コンストラクタ
public RequiredData(SerializationInfo info, StreamingContext context)
{
Required = info.GetBoolean("Required");
Message = info.GetString("Message");
}
#region ISerializable メンバ
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("Required", Required);
info.AddValue("Message", Message);
}
#endregion
}
0 件のコメント:
コメントを投稿