Quelle est la différence entre eventOne (avec mot-clé 'event') et eventTwo (mot-clé w/o)?Le mot clé 'event' est-il facultatif en C#?
class Program
{
public event EventHandler eventOne;
public EventHandler eventTwo;
public void RaiseOne()
{
if (eventOne != null)
eventOne(this, EventArgs.Empty);
}
public void RaiseTwo()
{
if (eventTwo != null)
eventTwo(this, EventArgs.Empty);
}
static void Main(string[] args)
{
var p = new Program();
p.eventOne += (s, e) => Console.WriteLine("One");
p.eventTwo += (s, e) => Console.WriteLine("Two");
p.RaiseOne();
p.RaiseTwo();
}
}
Avez-vous un oeil à l'IL réelle? Vous serez étonné. – Prankster
Oui, j'ai. Qu'est-ce qui vous a étonné? –
Alors que 'ajouter' et 'supprimer' sont réellement générés, le compilateur les a optimisés, donc dans le code ci-dessus la seule différence sera les modificateurs d'accès sur les délégués. – Prankster