fonction décorateurs c#

Existe-t-il un c# analogique pour les décorateurs de fonctions de Python? On dirait que c'est faisable avec les attributs et le cadre de réflexion, mais je ne vois pas comment remplacer les fonctions à l'exécution.

décorateurs Python généralement travailler de cette façon:

class decorator(obj):
    def __init__(self, f):
        self.f = f
    def __call__(self, *args, **kwargs):
        print "Before"
        self.f()
        print "After"

@decorator
def func1():
    print "Function 1"

@decorator
def func2():
    print "Function 2"

appeler func1 et func2 donnerait alors

Before
Function 1
After
Before
Function 2
After

l'idée est que les décorateurs me laisseront facilement ajouter des tâches communes aux points d'entrée et de sortie de multiples fonctions.

22
demandé sur jtjin 2009-09-08 02:19:37

3 réponses

La façon dont j'y parvenir est par le biais de AOP frameworksChâteau Dynamique Proxy, Spring.NET ou encore Politique D'Injection Bloc D'Application.

12
répondu Richard Nienaber 2009-09-07 22:37:40

Vous pouvez le faire en utilisant Post Sharp. Consultez la vidéo de démonstration pour obtenir des instructions.

9
répondu Yuriy Faktorovich 2017-10-04 06:13:16

vous pouvez en quelque sorte y parvenir en "ContextBoundObject" dans le cadre de .NET. mais il est un peu alambiqué car il utilise essentiellement l'infrastructure remoting.Net pour intercepter les appels de méthode. (la charge d'exécution est minimale si vos appels sont dans le même domaine d'application mais dans un "contexte"différent). donc le mieux approches seraient ceux mentionnés ci-dessus par les autres affiches.

4
répondu 2009-09-07 23:28:12