inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Connector

캐스팅 질문 드려요.

376

작성자 없음

작성한 질문수 0

3

Connect 구현 중에 캐스팅 코드관련해서 궁금한 것이 있습니다.

명시적 캐스팅을 진행할 때

Socket socket = (Socket) args.UserToken;

이렇게 진행한다고 배웠는데

Socket socket = args.UserToken as Socket;

as 키워드로 하는 캐스팅이 나와 당황스러웠어요.

둘 차이점이 있나요?

C# unity network

답변 5

4

Rookiss

ㅎㅎㅎ 당황하실건 없고 그냥 아주 약간 차이가 있습니다.
(Socket) 요렇게 캐스팅하는게 가장 일반적인데
이 경우 Socket으로 캐스팅 될 수 없으면 Exception이 나면서 크래시가 납니다.
(as Socket) 형태는 C++의 dyamic_cast와 유사한데,
캐스팅이 안 된다면 null을 반환한다는 특징이 있습니다.
사실 지금은 Socket 타입인 것을 100% 확신할 수 있으니
(Socket) 이렇게 하는게 성능상 아주 조금 낫긴 합니다.

2

Rookiss

네 약간의 차이는 있지만 선택의 영역이라 볼 수 있습니다.

다만 상속 관계에서 특정 타입에만 코드를 적용하고 싶을 때라면,
의도적으로 (as)를 이용해서 확인하는게 유용할 수도 있습니다.
예를 들어 class Monster : Object, class Player : Object로 정의된 상태에서,
처치한 Object가 Player인 경우에만 PvP 포인트를 주고 싶다면,

Player p = obj as Player;
if (p != null)
   AddPvpPoint(...);

형태로 만들 수가 있겠죠.

0

literate_t

타입스크립트에도 같은 문법이 있는데 C#, 타입스크립트 모두 MS에서 추진한 거다 보니까 이런 공통점이 있네요.

0

장민창

감사합니다!!!!!!

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