ルルのゲーム開発備忘録

主にUnityやC#に関する情報を気まぐれに投稿していきま~す

【C#】ref修飾 (refパラメータ・ref戻り値・refローカル変数)について

はじめに

今回は、C#ref修飾詞について紹介します。

ref

通常、C#ではメソッドに値型を引数として渡したり戻り値を受け取ったりすると、オブジェクトがコピーされて受け渡しされますがrefを使うことで参照を受渡しするように指定することができます。受渡しするオブジュエクトが大きい場合には無駄なコピーを避けることで、処理を最適化することが可能です。

ref戻り値(参照戻り値)はC#7.2から利用可能になりました。

使い方

    private int num0 = 0; 

    // ref戻り値を使う場合、メソッドの宣言の前にrefをつける
    // refパラメータを使う場合、引数の前にrefをつける
    ref int Test(ref int num)
    {
        // ref戻り値を使う場合、returnする変数の前にrefをつける
        // 今回はint型の引数でわかりにくいが、引数に構造体などを指定してメソッド内で値を変更したりすると、元の構造体の値も当然変更される
        return ref num;
    }

    public void Test1()
    {
        // ref戻り値の受け取りには、refをつけたrefローカル変数で受け取る
        ref int num1 = ref Test(ref num0);

        num1 = 3;
        
        // num1はnum0を参照しているので,num0の値は3になっている
        Debug.Log(num0);
    }

さいごに

ちょこちょこ出てくることがあるので覚えておくといいかもです。

参考

Unityゲーム プログラミング・バイブル 2nd Generation
https://www.borndigital.co.jp/book/22432.html