Powiedzmy, że chcę zapisać grupę wskaźników funkcji w List<(*func)>
, a następnie wywołać je, być może nawet z parametrami ... Tak jakbym zapisał w Dict<(*func), object[] params>
mógłbym wywołać func z parametrami? Jak to zrobić?Jak zapisać wskaźnik funkcji w języku C#
Odpowiedz
. NET używa delegatów zamiast wskaźników funkcji. Możesz przechowywać instancję delegata, jak każdy inny rodzaj obiektu, w słowniku lub w inny sposób.
Zobacz Delegates z Przewodnika po programowaniu C# na MSDN.
Przejrzyj dokumentację C# na delegatach, która jest równoważnikiem C# wskaźnika funkcji (może to być zwykły wskaźnik funkcji lub zostać przekartkowany raz, aby dostarczyć ten parametr). Jest wiele przydatnych informacji.
Która dokumentacja C# na temat delegatów? Linki byłyby pomocne. – sblom
Istnieje kilka sposobów na zrobienie tego. Można to zrobić tak, jak sugerowali inni, korzystając z pomocy delegatów. Ale żeby słownik działał, wszyscy potrzebowaliby tego samego podpisu.
var funcs = new Dictionary<Action<object[]>, object[]>();
Albo jeśli mają różne podpisy można użyć rzeczywisty sposób odbity, jak na poniższym
var funcs = new Dictionary<MethodInfo, object[]>();
Możesz absolutnie mieć słownika funkcji:
Dictionary<string, Action<T>> actionList = new Dictionary<string, Action<T>>();
Dictionary<string, Func<string>> functionList = new Dictionary<string, Func<string>>();
actionList.Add("firstFunction",()=>{/*do something;*/});
functionList.Add("firstFunction",()=>{return "it's a string!";});
Następnie można wywołaj takie metody:
string s = functionList["firstFunction"].Invoke();
Możesz również wywoływać je bezpośrednio: 'functionList [" firstFunction "]()' –
Użyj eteru delegata lub wydarzenia (w zależności od zastosowania).
Jak zapisać wydarzenie w kolekcji? – svick
@svick, właściwości zdarzenia puchują się i pobierają, dodają i usuwają, ponieważ zdarzenia przechowują listę procedur obsługi. –
Jeśli przechowywania obsługi zdarzeń tylko wtedy ...
Dictionary<string, EventHandler> dictEvents = new Dictionary<string, EventHandler>();
dictEvents.Add("Event1", someEventHandler);
...
protected void someEventHandler(object sender, EventArgs e)
{
//Do something.
}
Edit:
- Ja to tutaj, bo szukałem sposobu, aby zrobić coś podobnego, kiedy znalazłem ten post . Jednak rozwiązania tego posta nie działały w mojej sytuacji, więc pomyślałem, że podzielę się tym, co dla mnie działa.
Co sprawia, że pytanie dotyczy obsługi zdarzeń? – svick
- 1. Jak utworzyć wskaźnik w języku C#?
- 2. pobierz wskaźnik funkcji 'ldftn' w C#
- 3. Pisanie wskaźnik funkcji w C
- 4. C: Wskaźnik do funkcji
- 5. Jak uzyskać nazwę funkcji ze wskaźnika funkcji w języku C#?
- 6. wskaźnik funkcji C++ Użytkownik Definicja
- 7. Jak funkcja zwraca wskaźnik do funkcji? (C++)
- 8. Wskaźnik funkcji Casting do Integer w C++
- 9. typedef i wskaźnik do funkcji w C
- 10. Wskaźnik do wskaźnika funkcji w C++
- 11. C++ - Polimorficzny wskaźnik do funkcji składowych
- 12. Składnia wskaźnika do funkcji zwracającej wskaźnik funkcji w C
- 13. Jak zadeklarować wskaźnik do funkcji, która zwraca wskaźnik do tablicy wartości int w C/C++?
- 14. Jak zapisać obiekt graficzny jako obraz w języku C#?
- 15. Jak zadeklarować wskaźnik funkcji w nagłówku i pliku c?
- 16. Jak zmodyfikować wskaźnik, który został przekazany do funkcji w C?
- 17. C++ wskaźnik funkcji jako domyślny szablon Argument
- 18. C: Zadeklaruj lotny wskaźnik do funkcji
- 19. Howto: C++ wskaźnik funkcji z wartościami domyślnymi
- 20. Przekazywanie funkcji wskaźnik w Dlang
- 21. C++ Przypisywanie funkcji wskaźnik do innego
- 22. C++ czy kompilatory mogą wstawiać wskaźnik funkcji?
- 23. Wskaźnik funkcji C++ jako statyczny element członkowski
- 24. C++ przechowuj wskaźnik do funkcji składowej nieznanej klasy
- 25. Jak utworzyć wskaźnik funkcji noexcept?
- 26. Jak wyłączyć automatyczną optymalizację "przejścia przez wskaźnik" w języku ++?
- 27. char * wskaźnik ze stringa w C#
- 28. Array funkcji obsługi w języku C
- 29. Wskaźnik funkcji C++ (element członkowski klasy) do funkcji elementu niestacjonarnego
- 30. Jak wywołać wskaźnik funkcji członka?
Dict <(* func), obiekty [] params> wygląda na kiepski pomysł, ale to tylko ja. –
Używam go do "przełączania" typów, używając Type jako klucza i funkcji jako kodu. Działa świetnie, gdy "switch (typeof (string))" nie ... –