객체형 ??? ----------------------------------------------------------------------------------------------------------------------------

C#에는 큰의미로 봐서 다음과 같은 항목들이 존재한다.


값형

참조형


참조형은 말그대로 참조하는 형태를 의미한다. C++에서 익히 들어왔던  Call by Value & Call By Reference 와 비슷하다고 보고 있다.(이해가 좀더 완벽해지면 바뀔 수도 있지만.)

이중 참조형은 다음과 같은 분류로 나뉜다.


클래스형

- 객체형 -> 요녀석이 뭐지?

- 문자열형 -> 문자열주소와 같은 개념으로 보고 있다.

배열형 -> 말그대로 배열

델리게이트형 -> 함수로의 포인터


int a = 0;

object b; -> 이녀석이 객체형이다. .net형으로는 system.object가 된다.

b = a;


이 형에는 말그대로 무엇이든 대입할수가 있다고 하며 이렇게 대입하여 객체형을 값형으로 (object형에 int를 대입함으로서) 변형시키는 것을 박스(boxing)라고 한다.

이게뭐지????? 라고 하니


object형은 메모리상 어디엔가 영역을 확보하고 있고(힙? 코드? 스택? 데이터?) 그 참조가 object에 저장된다.(힙에다가 저장한다고 합니다. 스마트포인터 같은 느낌인가?)


반대로


int a = 0;

object b; 

a = (int)b;  ->역시 형변환은 필요한가?


이와같이 참조형으로 부터 값형으로 변환시키는 것을 박스화 해제(unboxing)라고 한다.


이녀석 실수할 거리가 많아보인다. 예제로 나온경우에는


long l = 0;

object o; 

int i;


o = l;

i = (int)o;  -> 롱형을 먼저 대입하고 그걸 인트형에 대입하니 오류.


object o = 1;

int i ;

i = (int)o; -> 값형의 데이터를 object에 대입했지만 참조형의 데이터도 object형에 대입할 수 있다. 이 경우는, 박스화라고는 하지 않는다.








'게임개발공부 > C#공부' 카테고리의 다른 글

C#공부에 대해서...  (0) 2013.12.18
C#에서 문자열형은?  (0) 2013.12.16
@의 의미가 대체 뭐지? C#에서 레퍼런스와 포인터란? 막긁어와!  (0) 2013.12.16
C#의 리터럴  (0) 2013.12.16
ToString("")  (0) 2013.12.15
Posted by JJOREG