C# メソッドのサンプル(値渡し/参照渡し他)

C#のクラスのメソッドのサンプルです。

目次

サンプル メソッドの引数に値渡しを使用する
  メソッドの引数に参照渡し(ref)を使用する
  戻り値を複数にする(outキーワード)
  メソッドで可変長引数を使用する
  メソッドで名前付き引数を使用する
  オプション引数を使用(引数を省略してデフォルト値をセット)

メソッドの引数に値渡しを使用する

メソッド名(データ型 変数名)
  • 値渡しは、メソッドを呼び出す時に値をコピーして渡します。
  • そのためメソッドの中で値が変化しても元の値には影響ありません。
  • 値渡しを行うときに何かキーワードを付ける必要はありません。
    →メソッドで引数を渡すときのデフォルトは、値渡しです。
using System;

namespace Project1
{
    class Sample1
    {
        public void GetCnt(int a)
        {
            a = a + a;
            Console.WriteLine(a); //2
        }
    }
    class Test1
    {
        static void Main()
        {
            int a = 1;
            Sample1 s1 = new Sample1();
            s1.GetCnt(a);
            Console.WriteLine(a); //1
        }
    }
}

19行目は、引数に変数aをセットしています。
9行目で変数の値が変わり10行目では2が表示されます。
20行目は、変数aの元の値は変わらないので1が表示されます。

メソッドの引数に参照渡し(ref)を使用する

呼び出し先のメソッド名(ref データ型 変数名)
呼び出し元のメソッド名(ref 変数名)
  • 参照渡しは、メソッドを呼び出す時にアドレスをコピーして渡します。
  • そのためメソッドの中で値が変化すると元の値も変更されます。
  • 参照渡しを行う時は、refキーワードを追加します。
using System;

namespace Project1
{
    class Sample1
    {
        public void GetCnt(ref int a)
        {
            a = a + a;
            Console.WriteLine(a); //2
        }
    }
    class Test1
    {
        static void Main()
        {
            int a = 1;
            Sample1 s1 = new Sample1();
            s1.GetCnt(ref a);
            Console.WriteLine(a); //2
        }
    }
}

19行目は、引数に変数をセットしています。refキーワードもついています。
7行目も引数の前にrefキーワードがついています。
9行目で変数の値が変わり10行目では2が表示されます。
20行目は、17行目の変数の値が表示されます。元の値も変わっているので2が表示されます。

戻り値を複数にする(outキーワード)

呼び出し先のメソッド名(out データ型 変数名)
呼び出し元のメソッド名(out 変数名)

戻り値を複数にする場合は、outキーワードを指定します。

using System;

namespace Project1
{
    class Sample1
    {
        public void GetCnt(int a,out int b, out int c)
        {
            b = a + a;
            c = a + b;
        }
    }
    class Test1
    {
        static void Main()
        {
            int a = 1;
            Sample1 s1 = new Sample1();
            s1.GetCnt(a,out int r1,out int r2);
            Console.WriteLine(r1); //2
            Console.WriteLine(r2); //3
        }
    }
}

19行目は、引数のr1とr2にoutキーワードがついています。変数r1とr2の宣言も行われていることになります。
7行目も引数の2つにoutキーワードがついています。
9,10行目は、returnがありませんが、outキーワードがついていた変数bとcの値は呼び出し元に返ります。
20,21行目は、それぞれ2,3が表示されます。

メソッドで可変長引数を使用する

メソッド名(params 配列)

可変長引数を使用する場合は、paramsキーワードを指定します。

using System;

namespace Project1
{
    class Sample1
    {
        public void Test(params string[] moji)
        {
            foreach (var a in moji)
            {
                Console.WriteLine(a);
            }
        }
    }
    class Test1
    {
        static void Main()
        {
            Sample1 s1 = new Sample1();
            s1.Test("あ"); //あ
            s1.Test("あ", "い"); //あい
            s1.Test(); //出力なし
        }
    }
}

7行目は、可変長引数のメソッドです。引数のところにparamsがあり、引数のデータ型は配列です。
20行目は、引数の数が1つです。出力されます。
21行目は、引数の数が2つです。出力されます。
22行目は、引数がありませんがエラーになりません。

以下は、MicrosoftのC#のparamsのリンクです。
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/params

メソッドで名前付き引数を使用する

呼び出し元のメソッド名(引数の変数名: 値)

呼び出し元のメソッドの引数に変数名:値を追加します。
引数の順番に関係なく記述できます。名前付きパラメーターとも呼ばれます。

using System;

class Class1
{
    private string name;

    public string print1(string name1,int num1)
    {
        return "色は" + name1 + "。数は" + num1 + "。";
    }
}
class Test1
{
    static void Main()
    {
        Class1 c1 = new Class1();

        string message2 = c1.print1(num1: 3, name1: "赤");
        Console.WriteLine(message2); // 色は赤。数は3。
    }
}

7行目は、メソッドの引数として2つあります。
18行目は、名前付きパラメーターです。メソッドの引数の順番が呼び出し元と呼び出し先で異なっていますが名前の指定どうりに値が渡されます。

引数を省略してデフォルト値をセットする

メソッド名(変数名 = 値)

メソッドの引数を省略してデフォルト値をセットする場合、呼び出し先のメソッドに値をセットします。

using System;

class Class1
{
    private string name;

    public string print1(string name1,int num1 = 3)
    {
        return "色は" + name1 + "。数は" + num1 + "。";
    }
}
class Test1
{
    static void Main()
    {
        Class1 c1 = new Class1();

        string message1 = c1.print1("赤");
        Console.WriteLine(message1); // 色は赤。数は3。

        string message2 = c1.print1("赤",5);
        Console.WriteLine(message2); // 色は赤。数は5。
    }
}

7行目の2つ目の引数は「int num1 = 3」となっています。呼び出す側の引数が一つの場合、2つ目の引数の値はこの3になります。デフォルト値を意味します。
18行目は、引数がひとつです。2つ目の引数の値はデフォルト値の3がセットされます。
21行目は、2つ目の引数に5をセットしています。この場合、セットした値の5が優先されます。

関連の記事

C#入門 クラスの仕組みとサンプル
C# オーバーライドのサンプル
C# オーバーロードのサンプル

△上に戻る