C# Int
에서 유형은 ValueType
에서 파생됩니다. ValueType
은 Object
유형에서 파생됩니다. 따라서 Int
은 Object
입니다.권투와 언 박싱은 신화인가?
모든 값 유형 변수가 이미 Object
이면 복싱/언 박싱 중에 실제로 어떻게됩니까?
C# Int
에서 유형은 ValueType
에서 파생됩니다. ValueType
은 Object
유형에서 파생됩니다. 따라서 Int
은 Object
입니다.권투와 언 박싱은 신화인가?
모든 값 유형 변수가 이미 Object
이면 복싱/언 박싱 중에 실제로 어떻게됩니까?
Object
인스턴스에 대한 특정 메모리 레이아웃이 있습니다. 공간을 절약하고 원시 코드 (COM, p/invoke 등)와의 호환성을 위해 값 유형의 인스턴스가 해당 레이아웃을 준수하지 않습니다.
"boxing"은 실제 "개체"인스턴스의 값을 예상 레이아웃과 함께 포함합니다. 이것은 object
인스턴스에서 작동하는 모든 다양한 함수에 의한 다형성 사용을 가능하게하고 해당 인터페이스를 기대합니다.
Int32
은 Object
의 하위 클래스라고 말하는 것이 정확하지 않습니다. "boxed Int32
"이지만 "unboxed Int32
"인스턴스에는 하위 클래스 하위 개체가 전혀 없습니다. (특히 object
레이아웃에는 실제로 파생 된 유형의 인스턴스에 대한 포인터가 포함되어 있습니다. 값 유형 객체의 유형은 기타 관계로 결정됩니다., 형식 메타 데이터가 포함되어 있지 않습니다. 또는 모니터 . 또는 object
의 다른 모든 케이크. 박스형 버전 않습니다.) Object
의
그러나 Int32는 Object의 하위 클래스입니다. Animation에서 Cat을 파생시키고 Move 메서드를 재정의하면 일부 메서드가 오버로드 되었기 때문에 Cat이 Animal의 인스턴스가 아니라고 말할 수 없습니다. –
왜 값 유형의 인스턴스가 메모리 레이아웃을 따르지 않는지? 그 차이점은 무엇입니까? –
@Ask : 나는 단순히 동일하지는 않지만 행동은 존재하지 않는다고 말하는 것이 아닙니다. 값 유형에는 vtable이 없어 가상 메소드를 가질 수 없습니다. 모니터가 없으므로 lock 문과 함께 사용할 수 없습니다. –
생각해을 단순히 치형이 상속되는 기본 클래스 값이 아닌 유형의 행동를 나타내는 유형으로. Boxing은 값 형식을 참조 형식 래퍼에 넣은 다음 값 형식을 으로 변경하고과 같은 개체를 만듭니다.
MSDN에서:
참조 및 값이 두 종류의 궁극적 인 기본 Object 클래스에서 파생됩니다. 에 대한 값 유형이 오브젝트처럼 작동해야하는 경우 값 유형을 참조 오브젝트처럼 보이게하는 랩퍼가 힙에 할당되고 값 유형의 값 이 복사됩니다.
'Int'유형이 없습니다. 아마도'System.Int32'를 의미할까요? –
귀하의 질문은 매우 빠르게 무한대로 downvoted 될 것이라고 가정합니다. – dymanoid
먼저 읽습니다. 예를 들면 다음과 같습니다. http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx –