Delegat w c#

0

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

1

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.

0

@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.

0

Ani z Action, ani z Func nie zrobisz zdarzenia. Pytanie, czy pytacz potrzebuje zdarzenie :)

0

@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ń.

2

@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.

2

@grzesiek51114: dwie proste zmiany w Twoim kodzie:

  1. zapewnij aby mogło być najwyżej trzech subskrybentów;
  2. wyświetl w subskrynencie informacje o publikującym.

Którą wersję będzie łatwiej zmodyfikować i dlaczego?

0

@somekind, @Juhas: hmm... kurcze, aż sobie doczytam, bo widzę, że nie byłem świadom wielu rzeczy.
Chodzi o możliwość prostego przekazania object sender oraz rzeczy typu EventArgs?

0

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. ;)

0

@somekind: To znaczy, że nawet dobrze przed chwilą myślałem, bo ten wzorzec jako pierwszy mi się skojarzył po tym co napisaliście razem z @Juhas.

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