構造体の入れ子

構造体の中で構造体を使う「構造体の入れ子」です。

前田稔(Maeda Minoru)の超初心者のプログラム入門

struct を使う

  1. struct を使った「構造体の入れ子」です。
    struct OBJ1 の中で struct OBJ2 を定義します。
    /*******************************/
    /*★ Struct Nest     前田 稔 ★*/
    /*******************************/
    using System;
    
    class console
    {
        public static void Main()
        {
            OBJ1 obj1 = new OBJ1();
            obj1.obj2 = new OBJ2();
            obj1.msg1 = "SUTUCT-1";
            obj1.int1 = 123;
            obj1.float1 = 3.14f;
            obj1.obj2.msg2 = "SUTUCT-2";
            obj1.obj2.int2 = 456;
            Console.WriteLine("msg={0} int={1} float={2}", obj1.msg1, obj1.int1,obj1.float1);
            Console.WriteLine("msg={0} int={1}", obj1.obj2.msg2, obj1.obj2.int2);
            System.Console.ReadLine();
        }
    }
    
    public struct OBJ1
    {
        public string msg1;
        public int    int1;
        public float  float1;
        public OBJ2   obj2;
    }
    public struct OBJ2
    {
        public string msg2;
        public int    int2;
    }
    
  2. OBJ1 と OBJ2 を struct で独立して定義します。
    new OBJ1() で OBJ1 をインスタンス化します。
    OBJ1 の obj2 を使って new OBJ2() をインスタンス化します。
            OBJ1 obj1 = new OBJ1();
            obj1.obj2 = new OBJ2();
        
  3. 後はそれぞれの要素に値を設定して印字します。
    OBJ1 の領域は obj1.msg1 = "SUTUCT-1"; のように参照します。
    OBJ2 の領域は obj1.obj2.msg2 = "SUTUCT-2"; のように参照します。

class を使う

  1. 同じプログラムを struct から class に変更してみました。
    class を使うと OBJ1 の中で「直接 OBJ2 を定義」することが出来ます。
    public class OBJ1
    {
        public string msg1;
        public int    int1;
        public float  float1;
        public class  OBJ2
        {
            public string msg2;
            public int int2;
        }
        public OBJ2   obj2 = new OBJ2();
    }
    
  2. また OBJ1 の中で OBJ2 をインスタンス化することも出来ます。
    そのときは Main() で OBJ1 だけをインスタンス化して下さい。

static を使う

  1. static で宣言すると class をインスタンス化しなくても使えるようになります。
    /*************************************/
    /*★ Static Struct Nest    前田 稔 ★*/
    /*************************************/
    using System;
    
    class console
    {
        public static void Main()
        {
            OBJ1.msg1 = "SUTUCT-1";
            OBJ1.int1 = 123;
            OBJ1.float1 = 3.14f;
            OBJ1.OBJ2.msg2 = "SUTUCT-2";
            OBJ1.OBJ2.int2 = 456;
            Console.WriteLine("msg={0} int={1} float={2}", OBJ1.msg1, OBJ1.int1,OBJ1.float1);
            Console.WriteLine("msg={0} int={1}", OBJ1.OBJ2.msg2, OBJ1.OBJ2.int2);
            System.Console.ReadLine();
        }
    }
    
    public static class OBJ1
    {
        public static string msg1;
        public static int int1;
        public static float float1;
        public static class OBJ2
        {
            public static string msg2;
            public static int int2;
        }
    }
    
  2. 後はそれぞれの要素に値を設定して印字します。
    OBJ1 の領域は OBJ1.msg1 = "SUTUCT-1"; のように参照します。
    OBJ2 の領域は OBJ1.OBJ2.msg2 = "SUTUCT-2"; のように参照します。

超初心者のプログラム入門(C# Frame Work)