어떠한 함수의 주소값을 가지고 있어 변수처럼 사용이 가능하게 만들어 준다.
c++의 함수 포인터와 유사하지만, 객체 인스턴스 및 메서드를 모두 캡슐화하는 완전한 객체 지향이다.
delegate를 선언할 때, 함수의 형태와 같도록 작성해준다.
이렇게 선언된 delegate는 같은 형태의 함수만 사용가능하다.
delegate (함수의 반환값) 변수명(함수의 매개변수);
delegate void Method(string _str);
선언된 delegate함수 Method를 a = Debug 정의하여 사용한다.
void Debug(string _str){
Debug.Log(_str);
}
void main(){
Method a = Debug;
a("Log");
}
출력
Log
선언된 delegate함수 Method를 다른 함수의 매개변수로 사용한다.
int Debug_Plus(int a, int b, Method _callback){
_callback("number is : " + (a + b).ToString());
}
void main(){
Method a = Debug;
Debug_Plus(1, 2, a);
}
출력
number is : 3
형태가 같은 함수를 하나의 delegate에 포함시켜 정의된 delegate하나만 호출해도 포함된 함수가 순서대로 전부 호출된다.
목록에 포함하고 싶을 때는 ' + '연산자와 ' += '를 사용한다.
목록에 제외하고 싶을 때는 ' - '연산자와 ' -= '를 사용한다.
void A(string _str){
Debug.Log("Is A : "_str);
}
void B(string _str){
Debug.Log("Is B : "_str);
}
void C(string _str){
Debug.Log("Is C : "_str);
}
void main(){
Method a = A + B;
a += C;
a("Log");
}
출력
Is A : Log
Is B : Log
Is C : Log
상속관계인 클래스중 상위 클래스로 선언 후 하위 클래스로 정의하는 것처럼,
delegate도 사용 가능하다.