C# クラスのメソッド(値渡し/参照渡し/戻り値が複数)

C#のクラスのメソッドの値渡しと参照渡しと戻り値が複数のサンプルです。

目次

メソッドで値渡し

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

コード

値渡しのサンプルです。

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キーワードを追加します。
  • 以下は、Microsoftのref (C# リファレンス)のリンクです。
    https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/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キーワード)

コード

戻り値を複数にするサンプルです。

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が表示されます。

関連の記事

C#入門 クラスの仕組みとサンプル
C# クラスのメソッド(名前/デフォルト/可変長引数)
C# オーバーライドのサンプル
C# オーバーロードのサンプル

△上に戻る