J'ai une classe statique (DataFormSubject) qui contient un objet de liste générique, comme suit:Création d'un événement qui déclenche lorsqu'une liste est mise à jour
private static List<DataForm> dataForms = new List<DataForm>();
D'autres classes qui comptent sur cette liste doivent être dit lorsque la liste est mise à jour, donc je créé un événement personnalisé, et les méthodes associées qui pourraient déclencher lorsqu'un élément est ajouté ou supprimé, comme suit:
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);
}
la liste est disponible à partir de la classe statique via une propriété, comme suit:
Mais le problème ici est que le client peut maintenant ignorer l'événement de mise à jour en accédant à la propriété et faire un ajout direct ou supprimer sur la classe! Par exemple. Comment puis-je empêcher cela, ou y a-t-il un meilleur moyen de réaliser ce que je veux? Idéalement, j'aimerais un événement de mise à jour sur la classe List auquel les observateurs peuvent s'abonner!
En aparté - * rien * qui implique statique les événements (directs ou indirects) sont susceptibles de causer des problèmes. Vous devrez être ** très ** strict sur le désabonnement, sinon vous garderez tous vos objets en vie et vous manquerez de mémoire. –
Je ne suis pas très heureux d'utiliser une classe statique pour cela non plus, mais comment puis-je conserver une seule collection accessible à travers mon application sans passer la collection fromobject à l'objet? – Calanus