工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C#の構造体:値型の定義と活用を徹底解説

C#において、構造体(struct)は値型のデータ型です。関連するさまざまなデータ型のデータを1つの変数で保持するのに役立ちます。構造体を作成するにはstructキーワードを使用します。

構造体はレコードを表現するために使用されます。例えば、図書館の本を管理する場合、以下の属性を追跡したいかもしれません。

構造体の定義

構造体を定義するにはstructステートメントを使用します。これは、プログラムで複数のメンバーを持つ新しいデータ型を定義します。

Book構造体の宣言例

struct Books {
    public string title;
    public string author;
    public string subject;
    public int book_id;
}

構造体の使用例

using System;

struct Books {
    public string title;
    public string author;
    public string subject;
    public int book_id;
}

public class TestStructure {
    public static void Main(string[] args) {
        Books Book1;  // Book1をBook型で宣言
        Books Book2;  // Book2をBook型で宣言
        
        // 書籍1の仕様
        Book1.title = "C Programming";
        Book1.author = "Nuha Ali";
        Book1.subject = "C Programming Tutorial";
        Book1.book_id = 6495407;
        
        // 書籍2の仕様
        Book2.title = "Telecom Billing";
        Book2.author = "Zara Ali";
        Book2.subject = "Telecom Billing Tutorial";
        Book2.book_id = 6495700;
        
        // 書籍1の情報表示
        Console.WriteLine("Book 1 title : {0}", Book1.title);
        Console.WriteLine("Book 1 author : {0}", Book1.author);
        Console.WriteLine("Book 1 subject : {0}", Book1.subject);
        Console.WriteLine("Book 1 book_id : {0}", Book1.book_id);
        
        // 書籍2の情報表示
        Console.WriteLine("Book 2 title : {0}", Book2.title);
        Console.WriteLine("Book 2 author : {0}", Book2.author);
        Console.WriteLine("Book 2 subject : {0}", Book2.subject);
        Console.WriteLine("Book 2 book_id : {0}", Book2.book_id);
        Console.ReadKey();
    }
}

実行結果:

Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700

C#構造体の特徴

C#の構造体は、従来のCやC++の構造体とは大きく異なります。主な特徴は以下の通りです。

クラス vs 構造体

特徴クラス(class)構造体(struct)
型の種類参照型値型
継承サポート(単一継承)サポートしない(インターフェース実装のみ)
デフォルトコンストラクタ定義可能定義不可(自動生成)
null許容デフォルトで許容Nullable<T>でのみ許容
メモリ配置ヒープスタック(またはインライン)
コピー時の挙動参照コピー値コピー(ディープコピー)

メソッドを持つ構造体の例(書き換え版)

using System;

struct Books {
    private string title;
    private string author;
    private string subject;
    private int book_id;
    
    public void GetValues(string t, string a, string s, int id) {
        title = t;
        author = a;
        subject = s;
        book_id = id;
    }
    
    public void Display() {
        Console.WriteLine("Title : {0}", title);
        Console.WriteLine("Author : {0}", author);
        Console.WriteLine("Subject : {0}", subject);
        Console.WriteLine("Book_id : {0}", book_id);
    }
}

public class TestStructure {
    public static void Main(string[] args) {
        Books Book1 = new Books();
        Books Book2 = new Books();
        
        Book1.GetValues("C Programming", "Nuha Ali", "C Programming Tutorial", 6495407);
        Book2.GetValues("Telecom Billing", "Zara Ali", "Telecom Billing Tutorial", 6495700);
        
        Book1.Display();
        Book2.Display();
        Console.ReadKey();
    }
}

readonly struct と ref struct(C# 7.2以降)

readonly structの例

readonly struct Point3D {
    public double X { get; }
    public double Y { get; }
    public double Z { get; }
    
    public Point3D(double x, double y, double z) {
        X = x; Y = y; Z = z;
    }
    
    public double DistanceFromOrigin => Math.Sqrt(X*X + Y*Y + Z*Z);
}

構造体を使用すべきケース

ベストプラクティス

C言語

  1. 次世代磁気ナノ構造「透明マント」でデータストレージを革新
  2. 2021年 コーディングスキルを飛躍させる厳選17冊のプログラミング本
  3. 3Dプリント格子構造で部品性能を向上:軽量化・高強度・衝撃吸収を実現
  4. C++構造体とクラス:組み込み開発者のための実践ガイド
  5. Nucleus RTOSのセマフォ:ユーティリティサービスとデータ構造
  6. 書評:『Digitise or Die』——IoT駆動トランスフォーメーションの青写真
  7. 破壊的テクノロジー時代に人間らしさを保つには
  8. C言語構造体:複雑なデータを効率的に整理
  9. C言語typedef:カスタム型名でコードをシンプルに
  10. C++データ構造:配列、構造体、ポインタで効率的なプログラムを構築
  11. Javaデータ構造: 従来クラス(Vector/Stack/Hashtable等)とコレクションフレームワーク概要