C\#의 포장 과 분해 에 대한 상세 한 설명 을 분석 합 니 다.

포장 과 뜯 기 는 값 형식 과 인용 형식 간 의 상호 전환 이 실 행 될 작업 입 니 다.1. 포장 은 값 형식 이 인용 형식 으로 전 환 될 때 2. 상 자 를 뜯 는 것 은 인용 유형 이 값 유형 으로 전환 할 때 상술 한 두 마디 말 만 발생 하 는 것 은 이해 하기 어렵 지 않 지만 깊 은 곳 에서 이해 하려 면 약간의 편폭 으로 해석 해 야 한다.우 리 는 먼저 포장 할 때 무슨 일이 발생 하 는 지 보 겠 습 니 다.다음은 가장 간단 한 포장 코드

object obj = 1;
라 는 줄 의 문 구 는 전체 상수 1 을 object 형식의 변수 obj 에 부여 합 니 다.상수 1 은 값 형식 으로 알려 져 있 으 며,값 형식 은 스 택 에 두 어야 하 며,object 는 참조 형식 으로 쌓 아야 합 니 다.값 형식 을 쌓 아 올 리 려 면 포장 작업 을 한 번 해 야 합 니 다.이 줄 의 IL 코드 는 다음 과 같 습 니 다.주석 부분 설명 에 주의 하 십시오.

.locals init (
  [0] object objValue
)  // IL object objValue
IL_0000: nop
IL_0001: ldc.i4.s 9 // 9
IL_0003: box [mscorlib]System.Int32 // IL box , System.Int32
IL_0008: stloc.0 // , 0
이상 은 포장 작업 을 수행 하 는 것 입 니 다.포장 작업 을 수행 할 때 피 할 수 없 는 메모리 공간 을 쌓 고 스 택 의 값 형식 데 이 터 를 신청 한 메모리 공간 에 복사 해 야 합 니 다.이것 은 메모리 와 cpu 자원 을 소모 해 야 합 니 다.우 리 는 상 자 를 뜯 는 작업 이 어떻게 된 일 인지 다시 봅 시다.아래 의 C\#코드 를 보십시오.

object objValue = 4;
int value = (int)objValue;
위의 두 줄 코드 는 한 번 포장 작업 을 수행 합 니 다.성형 숫자 상수 4 를 인용 형식 object 변수 obbValue 로 포장 합 니 다.그 다음 에 다시 한 번 상 자 를 뜯 는 작업 을 실 행 했 습 니 다.더미 에 저 장 된 인용 변수 obbValue 를 부분 성형 값 형식 변수 value 에 저장 합 니 다.마찬가지 로 우 리 는 IL 코드 를 볼 필요 가 있다.

.locals init (
  [0] object objValue,
  [1] int32 'value'
) // IL object objValue int32 value
IL_0000: nop
IL_0001: ldc.i4.4 // 4
IL_0002: box [mscorlib]System.Int32  // IL box , System.Int32
IL_0007: stloc.0 // , 0
IL_0008: ldloc.0// 0 ( objValue )
IL_0009: unbox.any [mscorlib]System.Int32 // IL unbox.any object System.Int32
IL_000e: stloc.1 // 1 value
상 자 를 뜯 는 작업 의 실행 과정 과 포장 작업 과정 은 정반 대 이다.더미 에 저 장 된 인용 형식 값 을 값 형식 으로 바 꾸 고 값 형식 변 수 를 주 는 것 이다.포장 작업 과 분해 작업 은 cpu 와 메모리 자원 을 추가 로 소모 해 야 하기 때문에 c\#2.0 이후 범 형 을 도입 하여 포장 작업 과 분해 작업 소 모 를 줄 였 다.

좋은 웹페이지 즐겨찾기