C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.88108 の関連記事表示

<< 0 >>
■88108  C#の配列コピーについて
□投稿者/ kasumi -(2018/08/03(Fri) 00:18:30)

    分類:[C#] 

    VisualStudio 2017 でC#を書いている者です。

    配列の扱いについて、
    以下のようなコードを書くと、配列Aは配列Bと同じになるのですが、
    これはこういうものなのでしょうか。
    配列は参照型であることは理解したのですが、Aは要素数も3→5に変わっているので、
    なんのエラーも無く配列AがBを参照する、ということに違和感がありますが・・・。
    ---------------------
    int[] A = { 1, 2, 3};
    int[] B = { 1, 2, 3, 4, 5};
    A = B;
    ----------------------




親記事 /過去ログ151より / 関連記事表示
削除チェック/

■88109  Re[1]: C#の配列コピーについて
□投稿者/ kiku -(2018/08/03(Fri) 10:19:51)
    下記サイトの「配列のコピー」の部分を見てください。
    ※一番下から探した方が早いです。
    https://java2005.cis.k.hosei.ac.jp/materials/lecture11/array1.html

    上記サイトは、Javaの例ですが、考え方は同じです。
    図の部分のID750と記述がありますが
    この値を値コピーしていることになります。
記事No.88108 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88112  Re[2]: C#の配列コピーについて
□投稿者/ はまぐり -(2018/08/03(Fri) 10:37:05)
記事No.88108 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88120  Re[3]: C#の配列コピーについて
□投稿者/ kiku -(2018/08/03(Fri) 11:49:20)
    No88112 (はまぐり さん) に返信
    > 全然関係ないですけど、リンク先の参照渡しの説明はこれはちょっとあれですね・・・違いますね

    「配列のコピー」の部分をみてくださいとご案内しているのですが、
    別の部分を見ていませんか?
記事No.88108 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88121  Re[4]: C#の配列コピーについて
□投稿者/ はまぐり -(2018/08/03(Fri) 11:58:48)
    No88120 (kiku さん) に返信

    質問とはまったく関係ない話をしてみただけなので
    興味ないなら無視して大丈夫です

    「配列のコピー」の部分はそのとおりだと思いますよ

記事No.88108 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88128  Re[2]: C#の配列コピーについて
□投稿者/ kasumi -(2018/08/03(Fri) 12:34:51)
    みなさま

    どうもありがとうございます、勉強になります。
    私は最初に学んだ言語がFortranだったので、C#における配列の扱いに戸惑っていました。
    Fortranと同様の配列演算をコーディングすると、とんでもないことになりますね・・・。

    趣味でWindows用ツールをFortranで書いていたのですが、GUIが使えないのでなんだかなーと思っていたら、
    VisualStudioが個人利用において無償で利用できることを知り、GUIも比較的簡単に作成できるC#へ足を踏み入れました。


    -------(ご参考)以下、トピックの背景です------------------------------------------
    @複数のメソッドで、ある配列Aを参照できるようにしたい。//Fortranでいうところの、変数モジュールのようなもの
    AClass hogehoge を作成し、配列Aを宣言すれば、複数のメソッドで使えるのでは。
    Bただし、配列Aは、あるメソッドSにより要素数が決定するので、配列A宣言時の要素数は不明 //Fortranでいうところの、Allocateはないものか・・・
    C試しに、メソッドSにて、本来配列Aに入れたいデータを一時的な配列Bに入れ、hogehoge.A = B; と書いたらうまくいった。
    Dなんでだろう・・・


記事No.88108 のレス / END /過去ログ151より / 関連記事表示
削除チェック/

■88110  Re[1]: C#の配列コピーについて
□投稿者/ はまぐり -(2018/08/03(Fri) 10:23:11)
記事No.88108 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88122  Re[1]: C#の配列コピーについて
□投稿者/ 魔界の仮面弁士 -(2018/08/03(Fri) 12:02:06)
    2018/08/03(Fri) 12:09:03 編集(投稿者)

    No88108 (kasumi さん) に返信
    > int[] A = { 1, 2, 3 };
    代入式の右辺は、「{1, 2, 3} という int[] 型インスタンス」を作成しています。
    それを左辺の、「int[]」型の変数 A から参照させています。


    > int[] B = { 1, 2, 3, 4, 5 };
    代入式の右辺は、「{1, 2, 3, 4, 5} という int[] 型インスタンス」を作成しています。
    それを左辺の、「int[]」型の変数 B から参照させています。


    > A = B;
    右辺 B は、「{1, 2, 3, 4, 5} という int[] 型インスタンス」を指しており、
    それを左辺の A に代入しています。

    それ以前に保持していた {1, 2, 3} への参照は、この時点で失われ、
    変数 A が参照しているインスタンスは、B が参照しているインスタンスと
    同一のオブジェクトとなります。(データのコピーではなく、参照のコピー)


    参照のコピーではなく、データのコピーが目的なら、
    Clone メソッドや Array.Copy メソッドを使います。



    > VisualStudio 2017 でC#を書いている者です。
    2017 なら、こういう記述もあったりして。


    int[] A = { 1, 2, 3 };
    int[] B = { 1, 2, 3, 4, 5 };
    ref int[] C = ref A;
    Console.WriteLine(A.Length); // まだ 3
    Console.WriteLine(B.Length); // まだ 5
    Console.WriteLine(C.Length); // まだ 3
    A = B;
    Console.WriteLine(A.Length); // 5 に変わった
    Console.WriteLine(B.Length); // 5 のまま
    Console.WriteLine(C.Length); // 5 に変わった
記事No.88108 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88126  Re[2]: C#の配列コピーについて
□投稿者/ Jitta -(2018/08/03(Fri) 12:31:54)
    どうして「コピー」と考えたんだろう?
    コピーと考えるから要素数の変化が〜とか気になるんじゃないかな?
    代入文は、BASICでは「LET A=B」でした。
    「AをBに等しくしなさい」という…あ、ここで「等しくするためにコピーする」になるの?
    写すではなく、内容を複製する、なんだけど。
記事No.88108 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88133  Re[2]: C#の配列コピーについて
□投稿者/ はまぐり -(2018/08/03(Fri) 13:23:44)
記事No.88108 のレス / END /過去ログ151より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -