Cześć,
brakuje mi pomysłu.. muszę dorobić jeszcze delgata do mojej gry snake w c#, ale nie mam pomysłu co on miałby robić. Czy ktoś mógłby mi podrzucić jakieś pomysły?
dzięki
Cześć,
brakuje mi pomysłu.. muszę dorobić jeszcze delgata do mojej gry snake w c#, ale nie mam pomysłu co on miałby robić. Czy ktoś mógłby mi podrzucić jakieś pomysły?
dzięki
Nie wiem jak jest zrobiona twoja gra, ale możesz zrobić np. zdarzenie, że wąż uderzył w ścianę, które będzie oparte o pewien delegat (funkcja odbierająca zdarzenie będzie musiała być zgodna z pewnym delegatem) i reagować na to zdarzenie.
@Ktos: delegaty i tworzenie eventów na ich podstawie jest spoko ale wg mnie dużo wygodniejsze jest zastosowanie Action
lub Func
, w zależności od potrzeb. Mniej pisania, a efekt w sumie ten sam.
Ani z Action, ani z Func nie zrobisz zdarzenia. Pytanie, czy pytacz potrzebuje zdarzenie :)
@Juhas: No, a w czym to na górze jest lepsze od tego na dole?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SomekindOfNamespace
{
public class SomeEventBasedClass
{
public delegate void IsInitializedEventHandler();
public event IsInitializedEventHandler IsInitialized;
public void MakeMoney() => IsInitialized?.Invoke();
}
public class SomeActionBasedClass
{
public Action IsInitialized;
public void MakeMoney() => IsInitialized?.Invoke();
}
public class Program
{
public static void Main(string[] args)
{
var actionClass = new SomeActionBasedClass();
actionClass.IsInitialized += () => Console.WriteLine("Action class initialized");
var eventClass = new SomeEventBasedClass();
eventClass.IsInitialized += () => Console.WriteLine("Event class initialized");
actionClass.MakeMoney();
eventClass.MakeMoney();
}
}
}
Co szkodzi odpalać akcje zamiast eventu? Poważnie pytam, bez sarkazmu i przeświadczenia o własnej racji. Sam napisałem się eventów w apkach strasznie dużo i w pewnym momencie przesiadłem się na akcje i funkcje: i stało się to niesamowicie wygodne względem zdarzeń.
@grzesiek51114: Eventy mają to do siebie, że mogą obsłużyć wiele żądań. Załóżmy, że masz klasę, która wywołuje event po wykonaniu dodawania. I teraz ten event musi obsłużyć jakaś inna klasa. W Twoim przypadku nie ma żadnej różnicy, czy będzie to zrobione za pomocą event, czy Func, czy Action. Ale weźmy teraz inny przykład. Ten event musi obsłużyć wiele innych klas (obiektów). I tu już pojawia się problem, bo nie obsłużysz tego za pomocą Func ani Action. W tym momencie musisz posłużyć się eventem i każdy obiekt, który "dodał" sobie ten event, zostanie poinformowany.
@grzesiek51114: dwie proste zmiany w Twoim kodzie:
Którą wersję będzie łatwiej zmodyfikować i dlaczego?
Po prostu eventy w C# to wbudowana w język implementacja wzorca Obserwator
.
A porównywanie ich z Action
to jak porównywanie volvo ze starym peugeotem. ;)