C#のデータ型も参照のこと。
C#の構造体は属性によってメモリレイアウトを明示的に指定することができるため、C/C++の構造体との相互運用に便利である。Windows APIなどで定義されている構造体と互換性のある型をC#の構造体によってユーザー定義することで、P/Invokeに利用できる。
VB.NETやF#といった.NET言語も、構文は異なるがC#と同様の構造体を備えている[7][14]。
C++/CLIでは、value structまたはvalue classによって.NETの構造体型を定義することができる[15]。
アライメント詳細は「データ構造アライメント」を参照
構造体のメンバーのメモリレイアウトは、必ずしも連続しているとは限らない。実行環境(プロセッサアーキテクチャ)に合わせてアクセス効率が最適になるよう、コンパイラによってバイト境界に応じた無名の詰め物(パディング)が挿入されることがある。このパディングはシリアライズや相互運用などで問題になることがあるため、フィールド属性やコンパイラ特有のディレクティブによってアライメントを明示的に調整できる言語や処理系も存在する[16][17]。ただし、アライメントされていないアドレスに構造体メンバーが配置された場合、メンバーアクセスがバスエラーを引き起こすケースもある。
脚注[脚注の使い方]
注釈^ データクラスのすべてのプロパティをvalで宣言することで、イミュータブルにすることもできる。
出典^ User-defined data type (VBA) 。Microsoft Docs
^ レコード・クラス 。Oracle Java SE 16 Help Center
^ Java 16の最新情報 。InfoQ
^ データクラス - Kotlin Programming Language
^ a b 構造体型 - C# リファレンス 。Microsoft Docs
^ a b クラス - C# プログラミング ガイド 。Microsoft Docs
^ a b Structure ステートメント - Visual Basic 。Microsoft Docs
^ 構造体とクラス(Structures and Classes) ・ The Swift Programming Language日本語版
^ Structures and Classes ? The Swift Programming Language (Swift 5.6)
^ OpenCL-Headers/cl.h at master ・ KhronosGroup/OpenCL-Headers
^ Vulkan-Headers/vulkan_core.h at master ・ KhronosGroup/Vulkan-Headers
^ Choosing Between Class and Struct - Framework Design Guidelines 。Microsoft Docs
^ Parameterless struct constructors - C# 10.0 draft specifications 。Microsoft Learn
^ Structures - F# 。Microsoft Docs
^ ref class and ref struct (C++/CLI and C++/CX) 。Microsoft Docs
^ StructLayoutAttribute Class (System.Runtime.InteropServices) 。Microsoft Docs
^ Storage and Alignment of Structures 。Microsoft Docs
関連項目
再帰データ型
Plain old data structure(英語版) (POD)
ビットフィールド
共用体
表
話
編
歴
データ型
ビット列
ビット
トリット
ニブル
オクテット
バイト
ワード
ダブルワード(英)
数値
整数型
符号付整数型
十進型(英語版)
有理数型(英語版)
実数型
複素数型
固定小数点型