Dodawanie metod do zdarzeń

0

Witam,
Mam taki króciutki programik w C#:

using System;

class Program
	{
	public delegate void Delegat();
	static public event Delegat Zdarzenie;

	static public void Wywolaj()
		{
		if (Zdarzenie!=null) Zdarzenie();
		}

	static void Metoda1()
		{
		Console.WriteLine("Metoda1");
		}

	static void Metoda2()
		{
		Console.WriteLine("Metoda2");
		}

	static void Main()
		{
		Zdarzenie+=Metoda1;
		Zdarzenie+=new Delegat(Metoda2);
		Wywolaj();
		}
	}

Jest tu zdarzenie Zdarzenie, do którego dodaję metody Metoda1 i Metoda2 na dwa sposoby. Jedną bepośrednio, a drugą ze słowem new. Po uruchomieniu obie metody są wywoływane prawidłowo. Moje pytanie brzmi: Czym różnią się te dwa sposoby dodawania metod do zdarzeń? Dodam, że tej pory we wszystkich źródłach zawsze widzałem ten ze słowem new.

0

Nie wiem, może Zdarzenie += Metoda jest niejawną konwersją, a druga wersja - jawną (explicit).

0

Hmm, to by było IMO troche dziwne, bo konwencja jest taka, że przy konwersji stosuje się operator konwersji np. liczba_calkowita=(int)2.0, to czemu akurat przy eventach miałoby być inaczej? new oznacza, że alokujemy pamięć, ale nie wiem, po co alokować pamięć dla delegata, skoro i tak jest on zawsze stały (chyba?).

0

hm mi nie dzila sposob dodawania zdarzenie += metoda1();
kompilator zglasza bledy. Nie wiem laczego Ci dziala :>.

0
HideYoshi napisał(a)

hm mi nie dzila sposob dodawania zdarzenie += metoda1();
kompilator zglasza bledy. Nie wiem laczego Ci dziala :>.

Nic dziwnego, przyjrzyj sie dokladnie co autor napisal w kodzie...

0

a rzeczywiscie moj blad :), nawyk z c++ ze zawsze po funkci daje sie nawiasy;

0

Od .NET 2.0 kompilator taka konstrukcje „ Zdarzenie += Metoda;” czyta jako "Zdarzenie += new Delegat(Metoda2);", wiec obie zapisy są poprawne nie różnią się niczym ;) w obojga przypadkach zostanie wywołany konstruktor delegacji i powstanie obiekt.

0
kurtth napisał(a)

Od .NET 2.0 kompilator taka konstrukcje „ Zdarzenie += Metoda;” czyta jako "Zdarzenie += new Delegat(Metoda2);", wiec obie zapisy są poprawne nie różnią się niczym ;) w obojga przypadkach zostanie wywołany konstruktor delegacji i powstanie obiekt.

Dzięki wielkie. Od dłuższego czasu mnie to zastanawiało, a nie mogłem znaleźć żadnych informacji o tym.

1 użytkowników online, w tym zalogowanych: 0, gości: 1