共用体 C#

共用体

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/11/27 00:24 UTC 版)

C#

C#では、共用体専用の構文は存在しない。 ただし、System.Runtime.InteropServices.StructLayoutAttributeで明示的なレイアウトを指定した構造体では、共用体同様の動作を指定することが可能である。

以下に例を示す。

using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Explicit)]
public struct Union {
    // メモリレイアウトのオフセットを指定する
    [FieldOffset(0)]
    public byte B0;
    [FieldOffset(1)]
    public byte B1;
    [FieldOffset(2)]
    public byte B2;
    [FieldOffset(3)]
    public byte B3;
    // メモリレイアウトのオフセットを B0, B1, B2, B3 と同じ領域に重ねる
    [FieldOffset(0)]
    public int N;
}

class Program {
    static void Main() {
        var u = new Union();
        // N の領域に値を書き込む
        u.N = 0x12345678;
        // B0, B1, B2, B3 の領域より値を読み出す
        Console.WriteLine(u.N.ToString("X")); // ⇒ 12345678
        Console.WriteLine(u.B0.ToString("X")); // ⇒ リトルエンディアンでは 78
        Console.WriteLine(u.B1.ToString("X")); // ⇒ リトルエンディアンでは 56
        Console.WriteLine(u.B2.ToString("X")); // ⇒ リトルエンディアンでは 34
        Console.WriteLine(u.B3.ToString("X")); // ⇒ リトルエンディアンでは 12
    }
}

  1. ^ 例えばMicrosoft Windows SDK<oaidl.h>では、共用体を利用したVARIANT型が定義されている。
  2. ^ 共用体宣言 - cppreference.com
  3. ^ 多くのCコンパイラでは(C11よりも前の時代から)拡張として無名の構造体および共用体をサポートしている。
  4. ^ 全ての共用体メンバは必ずPODだが、共用体自身がPODになるとは限らない。共用体はユーザー定義のコンストラクタなどを持てるからである。
  5. ^ 共用体の型名を決める識別子(union xxx {...};xxx)のことで、冒頭の説明にある「タグ情報」とは別物。
  6. ^ 多くのC++コンパイラでは拡張として無名の構造体をサポートしている。


「共用体」の続きの解説一覧




固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「共用体」の関連用語

共用体のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



共用体のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの共用体 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2024 GRAS Group, Inc.RSS