構造体
[Wikipedia|▼Menu]
</summary> public MutablePoint(int x, int y) { _x = x; _y = y; } /// <summary>System.ValueTypeのToString()メソッドをオーバーライド。</summary> public override string ToString() => $"({_x}, {_y})";}class Test { // フィールドで定義された構造体内の全てのフィールドはデフォルト値0で初期化されている。 static MutablePoint s_point; static void Main() { Console.WriteLine(s_point.ToString()); // (0, 0) が表示される。 // デフォルトコンストラクタ呼び出し。 var zeroPoint = new MutablePoint(); Console.WriteLine(zeroPoint.ToString()); // (0, 0) が表示される。 // 引数付きコンストラクタ呼び出し。 var point = new MutablePoint(5, 11); Console.WriteLine(TranslatePoint(point, 1, -9).ToString()); // (6, 2) が表示される。 Console.WriteLine(point.ToString()); // (5, 11) が表示される。 TranslatePoint(ref point, -2, 3); Console.WriteLine(point.ToString()); // (3, 14) が表示される。 Console.WriteLine("Press any..."); Console.ReadKey(true); } // 構造体型 (値型) は、仮引数に値のコピーが渡されるため、 // メソッド内での仮引数の操作によって呼び出し元の実引数の値が変更されることはない。 // 引数がrefパラメータならば、 // あるいはMutablePoint型がstructではなくclassで宣言されていたならば、 // 仮引数の状態の変更は実引数の状態に影響する。 static MutablePoint TranslatePoint(MutablePoint p, int dx, int dy) { p.X += dx; p.Y += dy; return p; } static void TranslatePoint(ref MutablePoint p, int dx, int dy) { p.X += dx; p.Y += dy; }}

C#のデータ型も参照のこと。

C#の構造体は属性によってメモリレイアウトを明示的に指定することができるため、C/C++の構造体との相互運用に便利である。Windows APIなどで定義されている構造体と互換性のある型をC#の構造体によってユーザー定義することで、P/Invokeに利用できる。

VB.NETF#といった.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)

ビットフィールド

共用体










データ型
ビット列

ビット

トリット

ニブル

オクテット

バイト

ワード

ダブルワード(英)

数値

整数型

符号付整数型

十進型(英語版)

有理数型(英語版)

実数型

複素数型

固定小数点型


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:31 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef