이번에는 델리게이트 연산에 대해 설명을 하고자 합니다.
델리게이트는 더하거나 뺄수가 있답니다. 또한 여개가 묶인 delegate 를 특정 delegate 만 제거할 수도 있답니다.
이해가 안가신다면 간단한 예를 들어보죠. 델리게이트 c를 부르면 a와 b가 동시에 부르게 됩니다.
간단히 표현을 하면
델리게이트 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)