次のように、汎用 List オブジェクトを保持する静的クラス (DataFormSubject) を取得しました。
private static List<DataForm> dataForms = new List<DataForm>();
このリストに依存する他のクラスには、リストが更新されたときに通知する必要があるため、次のようにカスタム イベントと、項目が追加または削除されたときにトリガーできる関連メソッドを作成しました。
public delegate void DataFormsUpdatedHandler(object sender);
public static event DataFormsUpdatedHandler DataFormsUpdatedEvent;
public static void AddDataForm(DataForm df)
{
dataForms.Add(df);
if (DataFormsUpdatedEvent != null)
DataFormsUpdatedEvent(df);
}
public static void RemoveDataForm(DataForm df)
{
dataForms.Remove(df);
if (DataFormsUpdatedEvent != null)
DataFormsUpdatedEvent(df);
}
List は、次のように、プロパティを介して静的クラスから利用できます。
public static List<DataForm> DataForms
{
get { return dataForms; }
//set { dataForms = value; }
}
しかし、ここでの問題は、クライアントがプロパティにアクセスし、クラスに対して直接追加または削除を行うことで、更新イベントをバイパスできることです! 例えば
DataFormSubject.DataForms.Add(new DataForm);
どうすればこれを防ぐことができますか、または私が望むものを達成するためのより良い方法はありますか? 理想的には、オブザーバーがサブスクライブできる List クラスの更新イベントが必要です。