캐스팅 질문 드려요.
376
작성자 없음
작성한 질문수 0
Connect 구현 중에 캐스팅 코드관련해서 궁금한 것이 있습니다.
명시적 캐스팅을 진행할 때
Socket socket = (Socket) args.UserToken;
이렇게 진행한다고 배웠는데
Socket socket = args.UserToken as Socket;
as 키워드로 하는 캐스팅이 나와 당황스러웠어요.
둘 차이점이 있나요?
답변 5
4
ㅎㅎㅎ 당황하실건 없고 그냥 아주 약간 차이가 있습니다.
(Socket) 요렇게 캐스팅하는게 가장 일반적인데
이 경우 Socket으로 캐스팅 될 수 없으면 Exception이 나면서 크래시가 납니다.
(as Socket) 형태는 C++의 dyamic_cast와 유사한데,
캐스팅이 안 된다면 null을 반환한다는 특징이 있습니다.
사실 지금은 Socket 타입인 것을 100% 확신할 수 있으니
(Socket) 이렇게 하는게 성능상 아주 조금 낫긴 합니다.
2
네 약간의 차이는 있지만 선택의 영역이라 볼 수 있습니다.
다만 상속 관계에서 특정 타입에만 코드를 적용하고 싶을 때라면,
의도적으로 (as)를 이용해서 확인하는게 유용할 수도 있습니다.
예를 들어 class Monster : Object, class Player : Object로 정의된 상태에서,
처치한 Object가 Player인 경우에만 PvP 포인트를 주고 싶다면,
Player p = obj as Player;
if (p != null)
AddPvpPoint(...);
형태로 만들 수가 있겠죠.
0
감사해요! 모호하던것들이 점점 명확해져 가는 기분입니다.
그러면 상속을 받거나 구현체의 경우 Method에 where를 걸지 않는다면 as 키워드로 캐스팅을 하고
where를 걸었을 경우엔 () 괄호로 캐스팅 하는것이 안전할 것 같다는 생각이 드는데
이건 어디까지나 선택의 방법이겠죠?
TLS 질문드립니다.
0
43
2
SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.
0
46
2
Unity Span
0
75
2
XML, Dll 차이점
0
105
2
Session 질문입니다
0
79
1
Write Read 커서 키워드
0
75
1
더미 클라이언트 수에 따른 OnDisconnect 발생
0
70
2
네트워크 Send 전담 스레드 배치
0
98
2
UnhandledException 으로 서버 터지는 경우
0
85
2
컨텐츠 단, 엔진 단
0
104
1
질문 있습니다
0
77
2
C# 게임서버 3D MMORPG
0
145
2
유니티6 버전
0
97
2
receive하는 부분과 send하는 부분의 차이
0
134
2
커서의 위치의 중요성
0
103
2
C++ 전혀 모르는데 C# 서버
0
169
2
강의에 질문이 있습니다
0
86
2
멀티스레드 이해도 질문
0
95
1
500 vs 500
0
130
3
OnAcceptHandler 액션 함수
0
61
1
이 정도 서버의 객관적인 수준이 궁금합니다.
0
190
2
36. Serialization #3 에서 string (name) 코드 수정 질문
0
82
2
외부 컴퓨터와의 통신 방법이 궁금합니다
0
105
1
스핀락 질문.
0
110
2





