Action<Action<Action<string>>> 활용!!
공통 UI쪽 관련해서 조금 만지는 부분이 있는데...
코드를 아래와 같이 쓸수 있으면 어떨까? 라는 생각을 해봤다.
Call()( msg => msg( "x" ) );
Call() 호출하고 이어서 대리자로 연결된 메서드에 파라미터를 받아서 전달!!
UI를 다루면서 두가지 처리를 연속적으로 하게 되는 거였다.
UseFlowBodyPanel();
foreach( var data in ListDatas ) {
AddFlowBodyItem( data );
}
이런 식으로 처리하는 걸... 줄여서
UseFlowBodyPanel()( AddFlowBodyItem => foreach( var data in ListDatas ) AddFlowBodyItem( data ) );
실제 코드는 여러가지 조건들을 고려해서 조금 바뀌지만...위 처럼 갈 것이다.
다만 Call()은 테스트 코드로 작성했던것이기에... 기록으로 남겨두려 한다.
private Action<Action<Action<string>>> Call()
{
System.Diagnostics.Debug.WriteLine("Call!");
Action<Action<Action<string>>> returnMethodCall
= new Action<Action<Action<string>>>((msg)=> msg( Call_After ));
return returnMethodCall;
}
private void Call_After(string msg)
{
System.Diagnostics.Debug.WriteLine("Call_After!" + msg);
}
Action<string> 은 Call_After( string msg )와 연결되는 게 기본이니까 알겠는데...
연결지으려면 왜 Action<Action<...>> 으로 두개가 필요한건지는 잘 모르겠네...
찾는 방법은 Call() ( <-- 이렇게 코딩해놓고 vs에 표시되는 인자값이 Action<string> 인지 확인하였더니
Action<Action<...>> 이었다.
Action mth = s => console.Write( s ); 이런 형태로 Action이 빠지니까..
Call() 에서 리턴받은 object가 Action< Action < Action<string> > >
인데...
Action이 하나 빠지고
msg => msg( "x" )
msg는 Action<string> 이니까...
Action<Action<string>> 을 정의한거고...
.... 뭐래는겨......... 모르겠다 ㅠㅠ.
머리속에 맞춰지지 않는 퍼즐이 있는 것 같은 느낌... 아.. 싫어..
Action<Action<string>> mth1 = mthCall => mthCall("?");
mth1(Call_After);
---------------------------------------------------------------------------------
Action대신 Method로 바꿔 생각해보면...
Action< Action< Action<string > > >
Mth0( Mth1( Mth( string ) ) )
Mth0( Mth1( MethodName ) )
Call()( MethodName => MethodName( prms ) );
Action<string>
mth( string => string )
Action< Action<string > >
mth1( MethodName => MethodName( str ) )
Action< Action< Action<string > > >
mth0( mm => mm( MethodName ) )
Action<Action<Action<string>>> returnMethodCall
= new Action<Action<Action<string>>>((msg)=> msg( Call_After ));
-----> (msg)=> msg( Call_After )
이거 때문에 잠도 못잤네.
Call() ( 여기에서 왜? mth0이 사라지고 mth1이 대입되는거지??? ) : 두개가 벗겨지네...
Action<Action<Action<string>>> returnMethodCall = Call();
returnMethodCall( msg => msg("???") );
음... 실제 리턴받은걸 실행해보면... 위처럼 되네...?
어라... 뭐지?
Action<Action<Action<string>>> returnMethodCall
= new Action<Action<Action<string>>>((msg)=> msg( Call_After ));
returnMethodCall( 이자리는 Action<Action<string>> 타입이 들어와야 하니.. m => m("?") );
아... 이랬던가?
new로 대상을 지정하는 람다식과 대리자를 호출하는 부분에 차이때문에 내가 헷갈린건가...
아무렇지도 않게 사용하던거에... 정신이 나가버릴것 같네... 이제 이해가 된다...
'# 9) My Program(.NET) > PRJMNG' 카테고리의 다른 글
VS 확장 프로그램 2019 -> 2022 적용. (0) | 2024.06.08 |
---|---|
드디어 폰에... MAUI 배포. (0) | 2024.05.29 |
JSFW.PrivateKey 프로그램 업데이트. (0) | 2023.08.04 |
JSFW.FUNCTIONCONNECTION] 을 한번 더 업그레이드... (0) | 2022.12.29 |
JSFW.FunctionConnection] 업데이트 완료! (0) | 2022.12.24 |