構造体に初期値を設定

pnt.x=123  pnt.y=45

構造体に初期値を設定します。

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

プログラムの説明

  1. C++ と C# で次のように Point Struct(Class)を定義してみましょう。
    Point pnt;
    同じように書いても C++ と C# ではその意味が異なります。
    C++ では構造体そのもが定義されるのに対して、C# ではポインタが定義されるだけです。
    C++ で次のように書いた場合と同じ意味だと思って下さい。
    Point *pnt;
    従って new で領域を確保しない限り、初期値の設定が出来ないことは明白です。
    C++ で構造体に初期値を設定する方法は 構造体の基本-2 を参照して下さい。
  2. C# で構造体に初期値を設定するときは、コンストラクタを使います。
        struct Point
        {
            public  int x;
            public  int y;
    
            public Point(int X, int Y)
            {
                x = X;
                y = Y;
            }
        }
        
  3. 初期値の設定は new でコンストラクタを呼び出す時に、パラメータとして与えます。
    Point pnt = new Point(123,45);
  4. プログラムを完成させて下さい。
  5. C#では Point を宣言しなくても System.Drawing.Point として用意されています。
        Point   pt = new Point();
        pt.X = 3;
        pt.Y = 5;
    

直接初期値を設定する

  1. 構造体に直接初期値を設定する方法が無いわけではありません。
    static で宣言した class のメソッドはインスタンス化しなくてもそのまま呼び出すことが出来ると説明しましたよね。
    構造体にもこの方法を使うのです。
    Static 関数の説明は 独立した Class を定義 を参照して下さい。
  2. プログラムを見てみましょう。
    /**********************************/
    /*★ struct の初期値    前田 稔 ★*/
    /**********************************/
    using System;
    
    class console
    {
        public static void Main()
        {
            Console.WriteLine("pnt.x={0}  pnt.y={1}", Point.x, Point.y);
            System.Console.ReadLine();
        }
    }
    
    struct Point
    {
        static public  int x = 123;
        static public  int y = 45;
    }
    
  3. static 領域を参照するときは class 名で修飾して下さい。
    Point.x, Point.y

領域の混在

  1. 構造体に static 領域と automatic 領域を混在して定義してみましょう。
    int x はインスタンス化しなくても使えますが、int y はインスタンス化しなければ使えません。
    ここで大事なことは y はインスタンス化する毎に領域が確保される のに対して x は全てのインスタンスで一個しか存在しない ことです。
    struct Point
    {
        static public  int x = 123;
        public int y;
    
  2. プログラムを見てみましょう。
    x は class 名で修飾して下さい。
    /**********************************/
    /*★ struct の初期値    前田 稔 ★*/
    /**********************************/
    using System;
    
    class console
    {
        public static void Main()
        {
            Point   pnt1 = new Point(45);
            Point   pnt2 = new Point(67);
            Console.WriteLine("Point.x={0}  pnt1.y={1}  pnt2.y={2}", Point.x, pnt1.y, pnt2.y);
            Point.x = 321;
            Console.WriteLine("Point.x={0}  pnt1.y={1}  pnt2.y={2}", Point.x, pnt1.y, pnt2.y);
            System.Console.ReadLine();
        }
    }
    
    struct Point
    {
        static public  int x = 123;
        public int y;
    
        public Point(int Y)
        {   y = Y;  }
    }
    
  3. 実行の結果です。
    Point.x=123  pnt1.y=45  pnt2.y=67
    Point.x=321  pnt1.y=45  pnt2.y=67
    

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