작성
·
330
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에 배치되어 있습니다.