Wann sollten anonyme Methoden beim Definieren eines Delegaten verwendet werden und wann sollten formal definierte Methoden beim Definieren eines Delegaten verwendet werden?C# -Delegatendefinition - anonyme Methoden vs. formal definierte Methoden
Antwort
Wenn Sie dieselbe Logik an mehreren Stellen verwenden müssen, ist es sinnvoll, eine separate Methode zu verwenden.
Wenn Sie nur einmal die Logik verwenden müssen und es ist ziemlich kurz, ist es sinnvoll, eine anonyme Funktion zu verwenden. Wenn der Delegat Zugriff auf lokale Variablen in der Methode benötigt, die ihn erstellt, fungieren anonyme Funktionen als Schließungen, die auch sehr praktisch sein können. Eine anonyme Funktion kann nützlich sein, auch wenn sie ziemlich lang ist, wenn sie für Parallelisierung mit Parallel Extensions verwendet wird - Teil des Punktes ist, dass Sie vorhandenen seriellen Code nehmen und ihn parallel an Ort und Stelle "parallelisieren" können ein großes Ausmaß.
Sie sollten auch die Testbarkeit in Betracht ziehen - wenn der Code Ihres Delegierten ausreichend kompliziert ist, so dass er seine eigenen Unit-Tests garantiert, ist es sehr sinnvoll, ihn als Methode auszugeben. (Unglücklicherweise müsste es entweder eine interne Methode sein, die InternalsVisibleTo
oder eine öffentliche Methode verwendet, wo Sie normalerweise normalerweise privat sein möchten, aber so ist das Leben.)
Ich verwende anonyme Methoden, wenn die Funktion, die ausgeführt werden soll, nur von diesem Delegat ausgeführt werden soll (mit anderen Worten: wenn ich diese Funktion an keinem anderen Ort brauche), und wenn die Funktion/Methode ausgeführt werden ist relativ kurz (maximal 5 Zeilen).
Aber es gibt keine strengen Regeln, wann was zu verwenden ist.
IMHO, ich finde, dass anonyme Methoden in den meisten Situationen nicht zur Lesbarkeit beitragen, also verwende ich sie meistens nicht.
Ah, das macht Sinn re: relativ kurze Länge. Danke für die Meinung zur Lesbarkeit, da ich die anonyme Syntax ein wenig komplexer fand und ich mich fragte, ob das nur ich war! –
- 1. Statische Methoden vs Instanz Methoden in C#
- 2. LINQ vs Lambda vs anonyme Methoden vs Delegierte
- 3. Java neu definierte Methoden
- 4. Verschlüsse für anonyme Methoden in C# 3.0
- 5. C# 2.0 Threading Frage (anonyme Methoden)
- 6. C++ Singleton Vs statische Methoden
- 7. anonyme innere Klassen Innerhalb Methoden
- 8. Verwirrung über anonyme Methoden Parameter
- 9. Anonyme Methoden, Umfang und Serialisierung
- 10. Javas Methoden vs. Funktionen
- 11. Mongoose 'statische' Methoden vs. 'Instanz' Methoden
- 12. Konstrukteurs vs Factory-Methoden
- 13. Anmerkungen: Methoden vs Variablen
- 14. Funktionen vs. statische Methoden
- 15. `require` vs.` gem` Methoden?
- 16. Task.Factory.StartNew vs Async-Methoden
- 17. Imperative vs Interrogative Methoden
- 18. Ruby-Funktionen vs Methoden
- 19. Funktionstyp vs Funktionen (Methoden)
- 20. Silverlight Async-Aufrufe und anonyme Methoden
- 21. Anonyme Methoden - Variable Capture versus Wert Capture
- 22. So identifizieren Sie anonyme Methoden in System.Reflection
- 23. Dynamisch definierte Setter-Methoden mit define_method?
- 24. wie Sie einen C# -Delegaten, Methoden usw. basierend auf einer Delegatendefinition mit VS2013 generieren?
- 25. statische Klassendaten vs anonyme Namespaces in C++
- 26. HTTP-Methoden: DELETE vs POST
- 27. Standard Methods vs Extensions Methoden
- 28. Levenshtein distanzbasierte Methoden Vs Soundex
- 29. Laravel wo() vs whereLoose() Methoden
- 30. C++ - Arrays Methoden
Die Trennung der Logik war etwas, das ich nicht in Betracht gezogen hatte, und die Leichtigkeit des Zugriffs auf lokale Variablen ohne Parameter zu übergeben ist interessant. Sind parallele Erweiterungen eine C# 4.0-Funktion? –
Ich möchte hinzufügen, dass die beiden sich nicht gegenseitig ausschließen. Es ist oft praktisch, eine anonyme Funktion zu haben, die meist eine reguläre Funktion aufruft, um die Vorteile der Wiederverwendbarkeit und der Sperrung gleichzeitig zu nutzen. –
Ja, parallele Erweiterungen werden mit 4.0 geliefert. –