Kod przykładu z rzeczywistego świata, który był wielokrotnie wyświetlany, został już dostarczony we wcześniejszej odpowiedzi przez użytkownika "Console.WriteLine".
Jeśli chodzi o przyczynę, z tego, co zrozumiałem, Akcja jest sposobem, aby zaoszczędzić czas na definiowaniu nowych delegatów. Ponieważ jest to predefiniowany delegat poszczególnych typów sygnatur, oszczędzasz kłopotów związanych z tworzeniem różnych delegatów dla każdego zamierzonego celu. Wystarczy użyć predefiniowanego delegata akcji, aby wskazać swoje metody i je uruchomić. To samo dotyczy delegatów Func.
To raczej wygoda niż nowa funkcjonalność. Pomaga zachować krótki i zrozumiały kod przy mniejszym wysiłku.
Jeśli chodzi o pytania punktowych mądry,
- Co to różnica między nimi
No różnica. Akcja jest predefiniowanym delegatem, mającym na celu zaoszczędzenie ci kłopotów z wielokrotnym definiowaniem nowych delegatów.
- Kiedy używać delegata lub działania
Zazwyczaj delegata (i działania) jest używany w miejscach, gdzie trzeba mieć tabeli napędzane funkcjonalności. tj. być może słownik metod odpowiadających konkretnemu wymaganiu. Zauważ, że użycie tutaj Akcji ułatwia zmianę wybranej metody końcowej, wskazanie innej metody dynamicznie (może na podstawie pewnych ustawień wybranych przez użytkownika?)
class Program
{
static void Main()
{
Dictionary<string, Action> dict = new Dictionary<string, Action>();
dict["loadFile"] = new Action(LoadFile);
dict["saveFile"] = new Action(SaveFile);
dict["loadFile"].Invoke();
dict["saveFile"].Invoke();
}
static void SaveFile()
{
Console.WriteLine("File saved!");
}
static void LoadFile()
{
Console.WriteLine("Loading File...");
}
}
Innym typowym wykorzystywany jest w sposobach zwrotne. Przykładem może być użycie klasy BubbleSort, przekazanie metody porównawczej jako delegata do klasy, która byłaby używana przez klasę BubbleSort, aby umożliwić kodowi zdefiniowanie logiki porównania, jednocześnie zajmując się wszystkim innym. Można to również wykorzystać z rozpoczętych wątków, a wątek wywołuje delegata, gdy jakieś pośrednie działania wymagają poinformowania o kodzie.
Możesz skierować ten wpis SO, aby zobaczyć świetny przykład powyższego. https://stackoverflow.com/a/3794229/1336068
- Kiedy nie używać delegata lub działania
Jedynym powodem mogę myśleć nie korzystania z nich, gdy sytuacja tego wymaga, to jeśli Delegata nazywać się będzie miliony razy w krótkim czasie. Występuje niewielki narzut, a jeśli powoduje to opóźnienie aplikacji, być może trzeba będzie znaleźć lepszy sposób rozwiązania tego problemu, wykorzystując bezpośrednie odniesienie do swoich funkcji zamiast przez delegata.
- kiedy mogą być ponad zabić
Po nich korzystać nieodpłatnie bez rzeczywistej potrzeby. W przeciwnym razie w większości sytuacji mogą być eleganckim sposobem na rozwiązanie powyższych scenariuszy.
również czytać to SO odpowiedzieć, aby zobaczyć różnice pomiędzy normalnymi metodami, delegatów, aby uzyskać lepsze zrozumienie gdzie używać delegatów/action/func https://stackoverflow.com/a/17380580/1336068
działanie jest delegatem którego podpis ma parametry i ma brak wartości zwrotnej. – Siege
Mogę przeszukiwać i czytać MSDN na tych urządzeniach. Ale tego, czego szukam, to proste przykłady rzeczywistego świata dla delegata i działania – HatSoft
Nie możesz użyć 'Akcji' bez jednoczesnego używania delegata, ponieważ' Akcja' jest specyficznym typem delegata. – CodesInChaos