재우니의 블로그



이번에는 델리게이트 연산에 대해 설명을 하고자 합니다.

델리게이트는 더하거나 뺄수가 있답니다. 또한 여개가 묶인 delegate 를 특정 delegate 만 제거할 수도 있답니다.
이해가 안가신다면 간단한 예를 들어보죠. 델리게이트 c를 부르면 a와 b가 동시에 부르게 됩니다. 



간단히 표현을 하면 

c = a + b;


델리게이트 d에 c와 a 를 빼고자 한다면? 

d = c - a;


이렇게 표기하면 됩니다.

우리가 지속적으로 만들어 가고 있는 Car 클래스를 가지고 작업을 해 보겠습니다. 

소스가 점점 길어져서 추가할 부분만 제가 추출해서 소스를 올립니다.

예를 살펴보죠.








4번째줄에서 delegate 를 선언했습니다. 84줄의 메소드와 93줄의 메소드를 위임할 생각입니다. 
따라서 데이터형식이 int 형이고 인자형이 int 를 감안하여 delegate 도 동일하게 데이터형식 int 형으로 하였고, 인자형도 int 형으로 만들었습니다.





84줄 메소드와 93번의 메소드를 설정합니다. 

둘 다 메소드가 인자값을 받으면 인자값에 맞게 for 문이 실행되어 74번과 79번째줄의 메소드를 호출하게 됩니다.







126번째줄은 델리게이트 변수들을 선언 하고요. 128,129번째줄은 델리게이트를 생성했습니다. 
하나는 up, 다른 하나는 down 입니다. up 은 84번째 줄의 메소드를 위임받고요. 
down 은 93번째의 메소드를 위임받습니다.


134번째줄과 135번째줄은 델리게이트를 연산하는 방법입니다. 
134번째는 (+) 동시 호출을 뜻하고 135째는 (-) 특정의 델리게이트를 제외시키는 방법입니다.


134번째는 upPlus = AutoUp() + AutoDown() 로 풀어서 해석되고 두개의 메소드를 동시에 호출을 하며, 
135번째는 downPlus = (AutoUp+AutoDown())-AutoDown() 로 풀어서 해석되고....

downPlus 델리게이트는 AutoDown 델리게이트 간의 제거로 인해, 남는것은 AutoUp() 만 남아서 이로인해 당연히 AutoUp() 메소드에 대한 호출로 출력이 되겠죠.^^;


결과값은 ?






posted by 심재운 (shimpark@gmail.com)