CatZMedlem sedan jan. 20022 440 inläggEn riktig nybörjarfråga, har inte kollat så mycket på events tidigare men jag har en kontroll som jag vill tilldela event. Räcker det inte med
public class myClass
{
myControl.Event += new Event(myControl_Event);
public void myControl_Event(object o, EventArgs e)
{
//DoStuff!
}
}
CatZMedlem sedan jan. 20022 440 inläggÄsch det var inget, jag försökte skapa delegaten i fel klass...
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
}
GGladhMedlem sedan maj 20012 812 inlägg
nickemannen skrev:
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...
- M
Gladh skrev:
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.
MyClass.SomeThingHappend += DoSomeThing;
CatZMedlem sedan jan. 20022 440 inläggEn 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)
spangoMedlem sedan juni 20008 205 inläggHä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.
CatZMedlem sedan jan. 20022 440 inläggJaha, hade du för lite att göra i skolan eller? :p
Tack för infon!