finns någon som har möjlighet förklara vad delegate är och hur den används med event för en nybörjare, En delegate är ett objekt vars enda upgift är att peka på en metod i minnet. Tack så mycket för detta, Den syntaxen kommer att under ytan bli den koden jag skrev. Allt du gör där är att nyttja en genväg som Microsoft gett dig.delegate
försöker lära mig och har läst min bok några gånger men har inte försått riktigt,
tackSv: delegate
Delegaten kan peka på vilken metod som helst, så länge den metoden uppfyller de regler vi sätter upp när vi skapar delegaten.
Det här gör att vi inte direkt behöver bestämma vilken metod vi vill exekvera i en viss kodsnutt utan vi exekverar delegaten. Ex:
public delegate void MessageDelegate(string Name);
Koden ovanför definerar en deleagt som kan peka på metoder som har void som retur värde och en strängparameter som invärde. Det innebär att:
public void Hello(string Name) {
Console.WriteLine("Hello {0}", Name);
}
public string GetValue() {}
av de två ovanstående metoderna kan delegaten bara peka på den första. Dock kan den lika gärna peka på följande också:
public void DeleteCategory(string categoryName) {}
eftersom signaturen är rätt.
Man låter ett delegat object peka på en metod genom att skicka in metoden som konstruktorargument när man skapar objektet:
MessageDelegate del1 = new MessageDelegate(this.SayHello);
del1("BillG");
Delegater används sedan i events för att kunna invokera anonymt. Dvs din knapp behöver inte veta i förväg vilken metod vi vill att den skall ropa på när någon trycker på knappen, det kan vi berätta för den via en delegat lite senare.
Ex:
myButton.Click = new EventHandler(this.ButtonClick);
Där EventHandler har en defintiion som ser ut ungefär så här:
delegate void EventHandler(object Sender, EventArgs e);
I min tilldelning så tog jag ingen hänsyn till att det kunde vara flera metoder som ville bli invokerade när jag trycker på en knapp utan jag ersatte helt enkelt den eller de metoder som redan registrerats. Det här är dålig code practices ( och jag tror flera events förbjuder det). Därför använder man istället operatorn + för att (eller Delegate.Combine) för att lägga till fler metoder i delegaten ex på de båda:
btn.Click += new EventHandler(this.Method1);
btn.Click += new EventHandler(this.Method2);
btn.Click = Delegate.Combine(btn.Click, new EventHandler(this.Method1))
btn.Click = Delegate.Combine(btn.Click, new EventHandler(this.Method2))
Sv:delegate
jag förstår inte riktig vad den har för tillämpningar och fördel, om jag vill att när man trycker på min button ska min button göra något eller anropa en method varför jag ska inte göra som följande mindre kod och enkelt,
är det en dum fråga =) , kanske jag har inte förstått skillnaden mellan att anropa en method och en even. är de samma sak?
<asp:Button id="Button1"
Text="Click here for greeting..."
OnClick="method1"
runat="server"/>Sv: delegate