Delegate

대인공·2022년 11월 8일
0

C#

목록 보기
1/5
post-thumbnail

대리자

어떠한 함수의 주소값을 가지고 있어 변수처럼 사용이 가능하게 만들어 준다.

c++의 함수 포인터와 유사하지만, 객체 인스턴스 및 메서드를 모두 캡슐화하는 완전한 객체 지향이다.


구조

delegate를 선언할 때, 함수의 형태와 같도록 작성해준다.
이렇게 선언된 delegate는 같은 형태의 함수만 사용가능하다.

delegate (함수의 반환값) 변수명(함수의 매개변수);

  • 선언 예시
delegate void Method(string _str);

사용법

1. 기본

선언된 delegate함수 Method를 a = Debug 정의하여 사용한다.

void Debug(string _str){
	Debug.Log(_str);
}

void main(){
	Method a = Debug;
	a("Log");
}

출력
Log


2. 매개변수 전달

선언된 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


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도 사용 가능하다.

profile
이제 막 시작하는 유니티 클라이언트

0개의 댓글