2011-03-30 2 views
4

의 호출에 따라 이벤트를 설정하는 것입니다 I라는 기능을 가지고 말. AFun()가 호출 될 때마다, 그것은 가능한 기능

void AnEvent() 
{ 
//body 
} 

그리고 AnEvent()는 항상 호출됩니다, 말.

답변

4

그렇습니다.하지만 간접적으로 AFun에서 이벤트를 내 보내면 AnEvent는 해당 이벤트를 듣고 원하는 것을 얻을 수 있습니다. 그렇지 않으면 직접 지원되지 않습니다 무엇을 설명

코드 샘플 :

public delegate void EventHandler(); 
public event EventHandler ev; 

public void AFun 
{ 
    ...do stuff 
    ev(); //emit 
} 

//somewhere in the ctor 
ev += MyEventHandler; 

//finally 

void MyEventHandler 
{ 
    //handle the event 
} 
+0

코드 스 니펫이나 리소스를 설정하는 방법에 대한 예를 제공해주세요. –

+2

@Gunner, 이벤트를 선언하고 이벤트를 제기하고 듣는 것은 초보적인 C#/.NET입니다. C#에서 가장 좋아하는 입문서를 참조하십시오. –

+1

@Gunner : OK, 일부 코드를 제공했습니다. –

1

쉬운 방법 :

event EventHandler AnEventHappened; 

void AFun() 
{ 
    OnAnEvent(); 
} 

void AnEvent() 
{ 

} 

void OnAnEvent() 
{ 
    var tmp = AnEventHappened; 
    if(tmp != null) tmp(this, EventArgs.Empty); 
} 
+0

그건 컴파일되지 않습니까? ("EventHandler에서 Boolean으로 변환 할 수 없다"라는 메시지가 나오면 실패 할 것입니다.) –

+1

@Fred : 미안 - 너무 많은 자바 스크립트. null을 테스트하는 것. –

+0

AFun()을 수정하지 않고도 완료 할 수 있습니까? –

0

하드 방법 :

성처럼 뭔가

사용 관점 지향 프로그래밍 (Aspect Oriented Programming, 또는 PostSharp)를 선택하고 그런 식으로 이벤트를 내 보냅니다.

1

당신이 쓰는대로. 당신이 말하는 것은 "Aspect-Oriented Programming"(AOP)이며 컴파일러 지원이 필요합니다.

이제 코드의 올바른 위치에 리스너와 이벤트를 삽입하여 AOP를 수행하는 C# 및 .NET에 대한 확장이 있습니다.

오프 トピック : JavaScript에서이 작업을 수행 할 수 있습니다.