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の値を使用することができず、
必ず、新しい値が代入されてしまいます。

Related Posts:

  • viewstateの中身を見ようと思ったがうまくできないブログネタ こんにちは山田です。 postとgetの違いについて以前お話したのですが postで送信されるviewstateについて掘り下げたいと思います。 ■ViewStateとは ビューステートは、ページとコントロールの値をラウンド トリップ間で保持する方法です。 現在のページの状態と値を… Read More
  • ファイルアップロードで苦戦したところ(4MB) こんにちわYです。 本日は、ASP.NET 2.0 のファイルアップロードで苦労したところになります。 どういうわけか、ファイルサイズが4MB超えるとエラーになってしまうというものです。 System.Web.HttpUnhandledExcep… Read More
  • Google Maps JavaScript APIを使って、マップをWebページに埋め込む方法こんにちわ、開発者のⅠです。 今朝、JRのある路線で遅延が発生していたようですが、その原因が猪と衝突したことによる車両不具合だったそうです……どれだけ強い衝撃だったのでしょうか。 さて、今回は前回の投稿の続きです。 前回紹介したGoogle Maps APIには、様々な種類があります。 G… Read More
  • HttpResponse.Redirect メソッド (String)とはこんにちは山田です。 エアコンと床暖のランニングコストはどっちがお得なんだろうと 最近気になっています。 季節ネタはさておき今回は、使用していたリダイレクトメソッドを 調べてみたのでその備忘録になります。 開発環境:ASP.NET 2.0 ■HttpResponse.Redirect メソッド… Read More
  • インライン式 <%= %> と <%# %>の違いインライン式 <%= %> と <%# %>の違い こんにちわ、山田です。 ASP.NETを使っていてよくわからなかったところがあったのでまとめました。 この書き方、調べたらインライン式というらしい。 自分がよく使うものをまとめてみました。 ■埋め込みコードブロック【&l… Read More

0 コメント:

コメントを投稿