Dire que j'ai une classe comme ceci:Quels contrôles permettent d'appeler un événement?
public class FauxIdentityForm
{
public Guid FormID { get; set; }
public event EventHandler Closed;
public void TheObjectWasClosed(EventArgs e)
{
Closed(this, e);
}
}
Il est très bien pour moi d'appeler l'événement fermé à l'intérieur de la méthode TheObjectWasClosed
. Mais si, dans une autre classe (même dans le même fichier), j'ai une méthode comme ceci:
public void CallTheEvent()
{
FauxIdentityForm _formIdentity = new FauxIdentityForm {FormID = Guid.NewGuid()};
_formIdentity.Closed(_formIdentity, null); // <-- Does not compile!
}
L'appel à Fermé est abattu par le compilateur (il veut utiliser seulement + = et - =).
Donc, est en train d'appeler l'événement uniquement autorisé dans la classe? Est-ce la limitation?
Si tel est le cas, y a-t-il autour de lui? Et sinon, pourquoi les créateurs de C# font-ils cela? (Cela rend parfois très difficile le travail avec les événements.J'imagine qu'il y a une bonne raison et cela me sauve probablement de moi-même, mais j'aimerais le savoir.)
Donc, encore un peu confus, mais laissez-moi reformuler ce que je pense que vous dites et j'espère que j'ai raison: La seule ligne 'événement public EventHandler Closed; crée deux éléments dans l'IL? Celui qui est réellement public et celui qui est privé? L'événement est public donc il peut être consulté à l'intérieur et à l'extérieur de la classe. Le champ "caché" (je ne sais pas comment l'appeler) est privé et ne peut pas être appelé sauf à l'intérieur de la classe? – Vaccano
@Vaccano: Oui. Il déclare un champ et un événement. C'est un peu comme une propriété implémentée automatiquement à partir de C# 3, qui crée une propriété et un champ en une fois. Personnellement, je souhaite que la syntaxe de l'événement de type champ soit 'public event EventHandler Closed {add; retirer; } '- cela aurait été plus évident, IMO. –