클래스, 구조체 및 공용 구조체 마샬링
.NET Framework에서 클래스와 구조체는 유사합니다. 둘 모두 필드, 속성 및 이벤트가 있으며, 정적 메서드와 비정적 메서드를 가질 수도 있습니다. 한 가지 중요한 차이점은 구조체는 값 형식이고 클래스는 참조 형식이라는 점입니다.
다음 표에서는 클래스, 구조체 및 공용 구조체의 마샬링 옵션을 보여 주고 각 옵션의 용도에 대해 설명한 다음 해당되는 플랫폼 호출 샘플의 링크를 제공합니다.
형식 |
설명 |
샘플 |
---|---|---|
클래스를 값으로 |
정수 멤버가 포함된 클래스를 관리되는 경우와 마찬가지로 In/Out 매개 변수를 통해 전달합니다. |
|
구조체를 값으로 |
구조체를 In 매개 변수를 통해 전달합니다. |
|
구조체를 참조로 |
구조체를 In/Out 매개 변수를 통해 전달합니다. |
|
중첩 구조체가 있는 구조체(결합 구조체) |
중첩 구조체가 있는 구조체를 나타내는 클래스를 관리되지 않는 함수에서 전달합니다. 관리되는 프로토타입에서 이 구조체는 하나의 큰 구조체로 결합됩니다. |
|
중첩 구조체가 있는 구조체(결합되지 않는 구조체) |
포함된 구조체가 있는 구조체를 전달합니다. |
|
다른 구조체에 대한 포인터가 있는 구조체 |
다른 구조체에 대한 포인터가 멤버로 포함된 구조체를 전달합니다. |
|
정수가 포함된 구조체 배열을 값으로 |
정수만 포함된 구조체의 배열을 In/Out 매개 변수를 통해 전달합니다. 배열의 멤버는 변경할 수 없습니다. |
|
정수 및 문자열이 포함된 구조체 배열을 참조로 |
정수 및 문자열이 포함된 구조체 배열을 Out 매개 변수를 통해 전달합니다. 호출되는 함수에서는 해당 배열에 메모리를 할당합니다. |
|
값 형식이 있는 공용 구조체 |
값 형식(정수 및 double)이 있는 공용 구조체를 전달합니다. |
|
혼합 형식이 있는 공용 구조체 |
혼합 형식(정수 및 문자열)이 있는 공용 구조체를 전달합니다. |
|
구조체에서 null 값 |
값 형식에 대한 참조 대신 null 참조(Visual Basic에서는 Nothing)를 전달합니다. |