2015年11月30日月曜日

C# ref修飾子とout修飾子とは

こんにちは山田です。
メソッドに引数を参照渡しで渡す方法です。


メソッドの戻り値で完結することが多いのですが、
それ以外に、戻り値とは別に引数を返したい場合があります。

自分が使うシーンとしては、メソッドの戻り値でDBから取得したデータリストを取得して、
そのデータの個数の値を別個に取得したいときなどがあります。

開発環境:ASP.NET2.0
開発言語:C#

値渡しの場合と、参照渡し場合の違いをまとめてみました。

■元々(値渡しの場合)
    public static void A(int arg1)
    {
        arg1 = 50;
    }
    public static void Main()
    {
        int x = 10;
        A(x);
        Console.WriteLine(x);
    } 
出力は10のままで、呼び出しもとには影響がありません。


■ref修飾子(参照渡し)
    public static void A(ref int arg1)
    {
        arg1 = 50;
    }
    public static void Main()
    {
        int x = 10;
        A(ref x);
        Console.WriteLine(x);
    } 
出力は50になる
呼び出しもとの数値が変わりました。

■out修飾子(参照渡し)
outを使う場合はrefとは違い
あらかじめ値を代入しておく必要がなくなります。
    public static void A(out int arg1)
    {
         arg1 = 50;
    }

    public static void Main()
    {
        int x; //←ここで代入しても参照が渡ることはないです。
        A(out x);
        Console.WriteLine(x);
    } 
出力が50になる。

その代わりAメソッド内でoutパラメータのarg1の値を使用することができず、
必ず、新しい値が代入されてしまいます。

0 コメント:

コメントを投稿