• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

OnAcceptCompleted 코드에서 질문이 있습니다.

22.01.13 00:18 작성 조회수 245

0

1. Action.Invoke(), Func.Invoke() 

Invoke() 함수가 많이 등장하는데 MSDN을 살펴봐도 딱히 나오는 내용이 없더군요. 

느낌상 <T> 제네릭 객체를 반환하는 것 같은데 어떤 기능을 하는지 잘 모르겠습니다. 

 

2. 다형성에 관한 질문 

OnAccpetCompleted에서 

if (args.SocketError == SocketError.Success)

            {

                Session session = _sessionFactory.Invoke(); 

                session.Start(args.AcceptSocket);

                session.OnConnected(args.AcceptSocket.RemoteEndPoint);

            }

 

라는 코드가 있습니다. 

여기서 _sessionFactory에 ( ) => { return new GameSession( ) } 람다함수가 들어있습니다. 

 

_sessionFactory는 Func<Session> 이므로 람다함수가 반환한 GameSession이  Session 으로 형변환이 될 것 같습니다. 

 

그리고 _sessionFactory.Invoke( )를 하면서  Session 객체를 반환할 것 같습니다. <-- 1번 질문

 

그런데 여기서 반환된 Session 객체가 OnConnected라는 메소드를 가질 수 있다는게 잘 이해가 안갑니다. 

_sessionFactory에 람다함수를 연결하는 과정에서 GameSesison이 Session을 형변환을 했으면, GameSession에 Override된 OnConnected를 쓸 수 없는거 아닌가요? 

 

어떤 부분이 틀렸는지 알려주시면 감사하겠습니다.

 

답변 1

답변을 작성해보세요.

0

1.
delegate 문법입니다.
delegate에 대해서 조사해보시기 바랍니다.

2.
매우 중요한 부분인데요.
virtual (가상) 함수에 대해 복습을 해보시기 바랍니다.
애당초 OnConnected는 abstract 함수이고 Session에 배치되어 있습니다.