パラメータ

関数に渡したパラメータの値を変更して、元のデータに及ぶ影響を調べます。

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

関数のパラメータ

  1. C#では関数のパラメータは規定値で Call By Value で渡されます。
    従ってパラメータの値を変更しても元のデータに影響することはありません。
    但し Object Class を渡す場合は「元のデータに影響」が及びます。
  2. func() のパラメータとして String と int 型の配列と MyCls を渡します。
    C#では、いずれも Object Class として定義されます。
    受け取った func() ではパラメータを通じて値を変更して、元のデータに及ぶ影響を調べます。
    /*★ Class Parameter を渡す    前田 稔 ★*/
    using System;
    
    class Prog
    {
        static string str;
        static int[]  ary;
        static MyCls  cls;
    
        public static void Main()
        {
            str = new string(new char[]{'s','t','r','i','n','g'});
            ary = new int[3]{ 1, 2, 3 };
            cls = new MyCls("Message", 123);
            Console.WriteLine("str:{0}", str);
            Console.WriteLine("ary[0]:{0} ary[1]:{1} ary[2]:{2}", ary[0],ary[1],ary[2]);
            cls.Print();
            Console.WriteLine("\n*Function Call\n");
            func(str, ary, cls);
            Console.WriteLine("str:{0}", str);
            Console.WriteLine("ary[0]:{0} ary[1]:{1} ary[2]:{2}", ary[0],ary[1],ary[2]);
            cls.Print();
        }
    
        static void func(String str, int[] ary, MyCls cls)
        {
            str = "Function Call";
            ary[0] = 9;
            ary[1] = 8;
            ary[2] = 7;
            cls.d1 = "Func String";
            cls.d2 = 999;
        }
    }
    
    class MyCls
    {
        static string  str= "";
        static int     val;
        
        // Constructor
        public  MyCls(string msg, int v)
        {
            str = msg;
            val = v;
        }
    
        public string d1
        {
            get
            {   return str;  }
            set
            {   if (value!=null)    str= value;  }
        }
        public int d2
        {
            get
            {   return val;  }
            set
            {   if (value>0)    val= value;  }
        }
        public void Print()
        {
            Console.WriteLine("MyCls str:{0}", str);
            Console.WriteLine("MyCls val:{0}", val);
        }
    }
    
  3. str と ary と cls の領域です。
    C#ではいずれも Object Class として定義されます。
        static string str;
        static int[]  ary;
        static MyCls  cls;
    
  4. new で Object Class を生成して、値を設定します。
        str = new string(new char[]{'s','t','r','i','n','g'});
        ary = new int[3]{ 1, 2, 3 };
        cls = new MyCls("\n*Message", 123);
    
  5. str と ary と cls をパラメータとして func() 関数を呼び出します。
        func(str, ary, cls);
    
  6. func() 関数ではパラメータを通じて値を変更します。
        static void func(String str, int[] ary, MyCls cls)
        {
            str = "Function Call";
            ary[0] = 9;
            ary[1] = 8;
            ary[2] = 7;
            cls.d1 = "Func String";
            cls.d2 = 999;
        }
    
  7. プログラムの実行結果です。
    パラメータを通じて int 配列と MyCls の元の値は変更されています。
    string の値は str = "Function Call"; で直接代入したのでは変わらないようです。
    C:\DATA\C#\BAT\Prog1>param
    str:string
    ary[0]:1 ary[1]:2 ary[2]:3
    MyCls str:Message
    MyCls val:123
    
    *Function Call
    
    str:string
    ary[0]:9 ary[1]:8 ary[2]:7
    MyCls str:Func String
    MyCls val:999
    

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