C\#의 포장 과 분해 에 대한 상세 한 설명 을 분석 합 니 다.
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 이후 범 형 을 도입 하여 포장 작업 과 분해 작업 소 모 를 줄 였 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.