2009-09-07 5 views
22

파이썬의 함수 장식자를위한 C# 아날로그가 있습니까? 그것은 속성과 반사 프레임 워크로 할 수있는 것처럼 느껴지지만, 런타임에 함수를 대체 할 수있는 방법은 없습니다. 아이디어는 장식이 나를 쉽게 입구와 출구 지점에서 일반적인 작업을 추가 할 것입니다함수 장식자를 사용하여 C#

 
Before 
Function 1 
After 
Before 
Function 2 
After 

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" 

가 FUNC1를 호출하고 FUNC2 다음 초래 :

Python decorators는 일반적으로이 방식으로 작동 여러 기능 중.

+0

나는 이것을 왜 흥미로운 소개로 간주 했는가? http://python.about.com/gi/dynamic/offsite.htm?zi=1/XJ&sdn=python&cdn=compute&tm=12&f=10&su=p284.9.336.ip_p504.1.336.ip_&tt=29&bt=0&bts=1&zu=http % 3A // www.python.org/doc/2.4.4/whatsnew/node6.html – ShuggyCoUk

+0

흠, 나는 언어에 이미 내장되어있는 것을 원했지만 답을 구하는 방법은 간단했다. 새로운 프레임 워크를 추가하지 않아도됩니다. 내 프로젝트는 매우 작아서 그렇게하는 것이 과잉 일 것입니다. – jtjin

답변

9

Post Sharp을 사용하면됩니다. 지시 사항은 데모 비디오를 확인하십시오.

+1

포스트 샤프는 꽤 멋져 보이지만, 작은 프로젝트에 프레임 워크를 추가하는 것은 함수 데코레이터가 필요한 것에 다소 과장 될 수 있습니다. 어쨌든 고마워요 : D – jtjin

+0

정말 간단합니다. 그냥 참조를 추가하고 속성을 상속합니다. –

+0

또한 45 일 평가판 사용 후 329 유로입니다. – Magnus

4

.NET 프레임 워크에서 "ContextBoundObject"를 사용하여이를 정렬 할 수 있습니다. 하지만 기본적으로 .net 원격 인프라를 사용하여 메서드 호출을 가로 채기 때문에 약간 복잡합니다. (호출이 동일한 앱 도메인 내에 있지만 다른 "컨텍스트"에있는 경우 런타임 오버 헤드가 최소화됩니다). 그래서 다른 포스터에서 위에서 언급 한 방법이 더 나은 방법 일 것입니다.

관련 문제