[C# Simple Callback] C# 의 정말 간단한 콜백 호출방법

as3 를 예로 들자면 콜백작성이 매우 자유롭다 이유는 Function 형이 존재하기 때문이다.

ex> var someMethod : Function
someMethod()

처럼 변수처럼 선언하였다가 변수를 원할때는 '()' 를 빼줬다가 메소드를 원할때는 '()'를 붙이기만 하면 된다.
 c# 은 이러한 나이스한 방법이 다소 제한된다.
교과서 적인 콜백을 보자면, 정석적인 이벤트 선언이나, 기본 api에서 제공하는 콜백을 사용하는 경우를 무수히 볼수 있다.
하지만 더욱 간편하고 as3 의 표현과 같은 느낌으로 사용하는 법을 한번 보자 정말 심플한 콜백 사용법이다.





public
partial class Form1 : Form { public Form1() { InitializeComponent(); //콜백테스트 클레스 선언 , 생성 CallBackTEST callbackTest = new CallBackTEST(); callbackTest.onComplete(complete); } //CallBackTEST 클레스에서 선언한 delegate 형식에 맞추어 int 변수 하나를 받는 메소드 작성 private void complete(int count) { Console.WriteLine("callback complete" + count); } } class CallBackTEST { //콜백을 전달할 delegate 선언 (인수 전달/) public delegate void onCompleteDele(int i); // 테스트 :: // 타이머가 시작작고 count가 2가 되었을때 콜백! // onComplete 의 매개변수 _callCompleteMethod 의 형식은 앞서 선언한 "onCompleteDele" 이다 public void onComplete(onCompleteDele _callCompleteMethod) { Timer t = new Timer(); t.Interval = 1000; t.Start(); int count = 0; t.Tick += delegate { if (count == 2) //!!콜백발생 _callCompleteMethod(count); ++count; }; } }
 
물론 as3 보다 복잡하긴 하지만 델리게이트를 선언함으로서 비동기 , 동기 처리가 가능하고 , 
인자를 넘기는것도 비교적 단순하다.
그리고 정말 장점은 콜백을 받는 메소드의 인텔리센스를 얻을수 있어 as3와 다르게 실수에 의한 런타임 에러를 방지할수 있다. 
Yamecoder 야매코더_
C# 2011.01.06 00:57
Powerd by Tistory, designed by criuce
rss