2012-02-01 3 views
4

복싱은 값 유형이 객체 유형에 할당되는 경우입니다. 객체에 참조 유형이 지정되어있는 경우에도 동일합니까?참조 유형 변수가있는 객체 유형 복싱

유형 (객체가 아닌)이 할당되면 어떤 일이 발생합니까? 그 권투도 있니?

int num=5; 
    object obj = num; //boxing 
    ////////////////////// 
    MyClass my = new MyClass(); 
    object obj = my; //what is name this convert (whethere is boxing?) 
+0

더 명확하게 예제를 추가하십시오. 그리고 [Enter]와 [Spacebar] 키를 확인하고 청소하십시오. –

+0

Henk이 말했듯이, 모든 타입은 객체이고 참조 타입은 힙에 저장됩니다. – Jodrell

답변

7

난 당신이

string s = "hello"; 
object x = s;  // no boxing, just implict conversion to base-type. 

같은 것을 의미하는 가정이 작동 System.String 때문에, 다른 모든 클래스처럼, System.Object에서 유래 :

public sealed class String : Object { ... } 
+0

고마워요. –

2

복싱이에, 객체 참조를 만드는 스택, 그 타입의 값을 참조하는 예 int, 힙에. 그러나 참조 유형 (마녀가 객체가 아닌)이 객체에 할당되면, 그것은 복싱이 아닙니다.

+2

왜 참조가 스택에 있어야합니까? 참조가 힙 또는 레지스터에있을 수 없습니까? –

16

복싱은 값 유형이 오브젝트 유형에 지정되는 경우입니다.

닫기. "복싱"은 값 유형의 값이 일 때에서 으로 변환 될 때 참조 유형 일 때 발생합니다.

참조 유형 값이 객체 유형의 변수에 지정되면 동일합니까? 값 유형의 값이 참조 형식으로 변환

호 권투 일어난다. 참조 유형 값을 오브젝트로 변환하는 것은 권투 변환이 아니며 참조 변환입니다.

참조 유형 (객체가 아닌)의 값이 객체 유형의 변수에 할당되면 어떤 일이 발생합니까?

참조 유형의 값은 참조입니다. 참조가 객체 유형의 변수에 지정되면 변수의 저장 위치에 참조 사본이 만들어집니다.

저 권투입니까? 값 유형의 값이 참조 형식으로를 변환 할 때

호 권투 일어난다. 참조 유형 값을 오브젝트로 변환하는 것은 권투 변환이 아니며 참조 변환입니다.

1

Eric의 답변은 CLI (Common Language Infrastructure) 표준 ECMA-335, 파티션 I (아키텍처), 제 5 장 (용어 및 정의)에 해당하며, 다음과 같이 정의합니다. "일부 값 유형을 갖는 값을 a 새로 할당 된 참조 형식 System.Object. "의 인스턴스를 사용하고 unboxing은"런타임 형식이 값 형식 인 System.Object 형식의 값을 값 형식 인스턴스로 변환합니다."

CIL (공통 중간 언어)의 상자와 언 박스 지침

다음과 같이 행동,이 또한 C# 또는 VB.NET의 맥락에서 개봉기/복싱의 말할 때 일반적으로 묵시적 의미입니다.

.

그러나, 조건 권투언 박싱 때로는 넓은/실제적인 의미로 사용된다 예를 들어, F 번호 box 및 언 박스 연산자는 값 유형과은 System.Object에서 참조 형식의 변환을 수행 할 수 있습니다
> let o = box "Hello World";; 
val o : obj = "Hello World" 
> let s:string = unbox o;; 
val s : string = "Hello World"