1. 값 유형 개체에는 unboxed와 boxed의 두 가지 표현이 있습니다. 반대로 참조 유형은 항상 boxed 형식입니다.
2. 값 유형은 System.ValueType에서 파생됩니다. 이 형식은 System.Object와 동일한 메서드를 제공합니다. 그러나 System.ValueType은 Equals 메서드를 재정의하고 두 개체의 필드 값이 완전히 일치하는 경우 true를 반환할 수 있습니다. 또한 System.ValueType은 GetHashCode 메서드를 재정의합니다. 이 재정의된 메서드가 사용하는 알고리즘은 해시 코드를 생성할 때 개체의 인스턴스 필드 값을 고려합니다. 이 기본 구현에는 성능 문제가 있으므로 고유한 값 유형을 정의할 때 Equals 및 GetHashCode 메서드를 재정의하고 명시적인 구현을 제공해야 합니다.
3. 값 유형을 기본 유형으로 사용하여 새 값을 정의할 수 없습니다. type 또는 New 참조 유형이므로 값 유형에 새로운 가상 메소드를 도입해서는 안 됩니다. 모든 메소드는 추상화할 수 없으며 모든 메소드는 암시적으로 봉인됩니다(재정의 불가능).
4, 참조 유형의 변수에는 힙이 포함됩니다. 객체의 주소 안에 . 참조 유형 변수는 생성 시 null로 초기화되며, 테이블 이름은 현재 유효한 개체를 가리키지 않습니다. null 참조 유형 변수를 사용하는 뷰는 NUllReferenceException을 발생시킵니다. 반대로 값 유형 변수는 항상 기본 유형의 값을 포함하며 값 유형의 모든 멤버는 0으로 초기화됩니다. 값 유형 변수는 포인터가 아니며 값 유형에 액세스하면 NullReferenceExcption 예외가 발생할 수 없습니다.
5 , 값 유형 변수 다른 값 유형 변수에 할당하면 필드별 할당이 수행됩니다. 참조 유형 변수를 다른 참조 유형 변수에 할당하면 메모리 주소만 복사됩니다
6. 두 개 이상의 참조가 힙의 동일한 객체를 참조할 수 있으므로 한 변수에 수행된 작업이 참조된 다른 객체에 영향을 미칠 수 있습니다. 반면에 값 유형 변수는 자체 포함되어 있으며 값 유형 변수에 대해 수행된 작업은 다른 값 유형 변수에 영향을 미칠 수 없습니다. unboxed 값 유형은 힙에 할당되지 않으므로 값 유형 변수가 정의되면 예제 메서드는 더 이상 활성 상태가 아닌 경우 가비지 수집을 기다리는 대신 할당된 저장소가 해제됩니다
위 내용은 값 유형 객체의 두 가지 표현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!