webForumDet fria alternativet

Events...

.NET

7 svar · 770 visningar · startad av CatZ

Medlem sedan jan. 20022 440 inlägg
Frågan#1

En 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!
	}
}
Medlem sedan jan. 20022 440 inlägg
#2

Äsch det var inget, jag försökte skapa delegaten i fel klass...

Medlem sedan aug. 20003 575 inlägg
#3

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
}
Medlem sedan maj 20012 812 inlägg
#4

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

Medlem sedan aug. 20003 575 inlägg
#5

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;

Medlem sedan jan. 20022 440 inlägg
#6

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)

Medlem sedan juni 20008 205 inlägg
#7

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.

Medlem sedan jan. 20022 440 inlägg
#8

Jaha, hade du för lite att göra i skolan eller? :p

Tack för infon!

262 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)