Action, Func 콜백 예시
다 찾아서 정리좀 하자
System.Action<T> T가 이 delegate의 매개변수
delegate는 따로 정리하자
Action, Func는 오버로드된 delegate들의 모음들?이라고 보면될듯
Action은 return값이 없는 delegate, Func는 return값을 갖는 delegate이다
Action, Action<T>, ~ Action<T, ......> 이런식으로 매개변수가 없는 것부터 여러개 가진것까지 다양하게 제공되어져있다.
여러가지 필요에 따라 사용할 수 있겠지만 이번에는 콜백용도로 사용하는 예시를 보이겠다.
문법은 그냥 슈도코드처럼 알아볼수있게만 쓰도록하겠음 컴파일러없이 그냥 쓰는건 익숙치가않아서..
class BBB
{
//이 함수는 클릭, 키입력등 특정 입력값 발생시 호출되는 함수로 가정하겠음
//매개변수 입력도 이 때 받게됨
public void Calculate(int a, int b)
{
print( "첫번째 입력 :" + a + " , " + "두번째 입력 :" + b + ", 두 수의 합은 " + (a + b));
}
}
class AAA
{
public void ShowCalculateBBB()
{
//여기서 BBB.Caculate()의 결과를 내가 원하는 때에 ShowCaclulateBBB()함수 호출을 통해 보고싶다면
}
}
BBB.Calculate가 호출될때가 아니라 내가 의도한 때에 AAA.ShowCalculateBBB를 통해 보고싶다면 어찌해야할까
방법은 여러가지있겠지만 여기선 람다식과 Action을 통해 사용하는 한가지 방법을 보이겠다.
class BBB
{
//이 함수는 클릭, 키입력등 특정 입력값 발생시 호출되는 함수로 가정하겠음
//매개변수 입력도 이 때 받게됨
public void Calculate(int a, int b)
{
AAA._receiveAction =
() =>
{
print( "첫번째 입력 :" + a + " , " + "두번째 입력 :" + b + ", 두 수의 합은 " + (a + b));
}
}
}
class AAA
{
public System.Action = _receiveAction;
//BBB.Calculate가 호출된 시점에 _receiveAction에 원하는 시퀀스가 저장되고
//그 시퀀스를 원하는 시점에 AAA.ShowCalculateBBB()를 통해 진행할수있다.
//만약 Action<T..>같이 매개변수를 둔다면 그 매개변수의 참조값을 가져와 접근도 가능하다
public void ShowCalculateBBB()
{
_receiveAction();
}
}
이런식으로 Action변수에 등록해놓는 방식으로 꺼내쓸수있다.
또 Action<object> 형으로 선언하면 박싱/언박싱 이슈가 있을 수 있지만 어떤 형을 인자로 사용하든 활용가능하다는 장점이 있다.
나중에 더 좋은 예시를 추가할것임