Jo, men tänk på att EventArgs kan vara något annat samt att new EventHandler kan vara någon annan typ av EventHandler, men man behöver inte skriva new EventHandler utan köra med metodnamnet direkt.
I vilka lägen man ska använda new EventHandler eller inte vet jag faktiskt inte, jag har sökt lite efter info men inte hittat någon, jag vet iallfall att ReSharper föreslår att man skall ta bort det.
Antingen kan man använda denna.
public class MyClass
{
private EventFiringClass _eventFiringClass
public MyClass
{
_eventFiringClass.ThingHappend += EventFiringClassThingHappend;
}
private void EventFiringClassThingHappend(object sender, EventArgs e)
{
// Do stuff
}
I vilka lägen man ska använda new EventHandler eller inte vet jag faktiskt inte, jag har sökt lite efter info men inte hittat någon, jag vet iallfall att ReSharper föreslår att man skall ta bort det.
Jag TROR det är så att för all event där din mottagar funktion matchar utseendet: (object sender, EventAtgs e) så har MS överlagrat += new EventHandler så att du bara kan kallar direkt på metodnamnet som du gör i ditt exempel.
Men så får du ändrar på utseendet för mottagar funktion så att du inte längre tar emot ett object och ett eventArgs, utan kanske bara tar emot : CustomerChangedEventArgs. Så måste du skapa en ny EventHandler som du sedan skall koppla ditt event till..
som sagt det är vad jag TROR, vet att MS har gjort en "massa mystiska förkortningar" till .NET 3.0/3.5 så det är möjligt att man aldrig behöver skapa sina eventhandlers längre utan kan anropa direkt till metoderna, dock inget jag testat...
Jag TROR det är så att för all event där din mottagar funktion matchar utseendet: (object sender, EventAtgs e) så har MS överlagrat += new EventHandler så att du bara kan kallar direkt på metodnamnet som du gör i ditt exempel.
Men så får du ändrar på utseendet för mottagar funktion så att du inte längre tar emot ett object och ett eventArgs, utan kanske bara tar emot : CustomerChangedEventArgs. Så måste du skapa en ny EventHandler som du sedan skall koppla ditt event till..
som sagt det är vad jag TROR, vet att MS har gjort en "massa mystiska förkortningar" till .NET 3.0/3.5 så det är möjligt att man aldrig behöver skapa sina eventhandlers längre utan kan anropa direkt till metoderna, dock inget jag testat...
- M
Detta skall gå i 2.0:an också.
Dock så måste man ju fortfarande definera sina event i klassen som kör dom t.ex.
public event EventHandler SomethingHappend;
men som jag skrev ovanför så räcker det att man skriver.
En av de där odokumenterade sakerna från M$, tredje saken jag dykt på de senaste tre veckorna som ingen haft någont "dokumenterat" svar på. Spännande att det fungerar på det viset... (dock lite... skrämmande mycket åt vb-hållet)
Häda inte, det här är snarare snott från språk som Lisp
Det är inte speciellt konstigt med det här (och har man trist kan man läsa kapitel 15 i The C# Language Specification ). En EventHandler är ju bara en helt vanlig delegate, och där ett delegate förväntas kan ett funktionsuttryck (vare sig det är lambdauttryck, en anonym funktion eller en metodreferens) automatiskt slås in i ett Delegate-objekt så länge som signaturen stämmer. Allting går att avgöra helt statiskt, de har bara skalat bort en del syntaktisk overhead.