日記帳だ! with Tux on Libserver

二度目の大改造!! 日記帳…か?を継承し、より柔軟でパワフルなBlogに変身しました。

RSSに対応しています。リンク・コメント・トラックバックは自由にしていただいてほぼ問題ありません。
RSS購読方法、僕のリンク・コメント・トラックバックについての考えを読むことをおすすめします。

<< 過去

未来 >>

C#の参照型だってポインタに負けないんだから

C#の勉強会が始まっていろいろやってたけど、
クラスの型、参照型と、構造体の型、値型の違いって難しいですね。
参照型は実体の参照Aが、値型は実体Bが変数に入ってると。
そして、変数の代入、メソッドに値渡ししたとき、
参照型は実体aの参照のコピーA'が渡されて、値型は実体のコピーB'が渡される。
値型のコピーであるB'をいじくったところで、もとのBは変わらない。
参照型のコピーであるA'を見ながら、実体aをいじくることはできる。
このとき、もとのAを見ながら実体aを参照すればいじくられてることになる。
しかし、もし新しいインスタンスcを作成して、それの参照をA'に入れたとしても、
もとのAはそのままaを参照してるので、変わらない。
この事実は結構大切なことです。
しかし、C#では参照型と値型の区別が付きにくいので無視されやすい。
だから僕は昔迷った。
byte[] buf=new byte[16];
//中略
fs.Read(buf, 0, buf.Length);
これについてもこの考えで考えよう。
まず、byte[]のインスタンスXをメモリ上に作成して、変数bufにXの参照を入れる。
Readメソッドに、bufのコピー、b'を渡す。それで、b'の指すXを見る。
それでXをいじくる。そしてその後にbufを見るとその指す先Xは変更されていると。
そう考えるとわかる。しかし、ここではbyte[]が参照型であるという事実が必要。
C++/CLIではC#における参照型は^を付けたハンドル型の変数を使うのでわかりやすい。
確かにちょこちょこ出てきてスマートじゃないけどね。
Cのポインタってなんかうっとうしいという話もあるけど、
C#の参照型というのもなにげにめんどくさいもんです。
この事実を絵に描いて覚えるということは大切ですね。
そうすれば、うまいことやれますよ。
foreachで回しながら、データをいじくることもできるようになりますよ。
Author : Hidemaro
Date : 2008/07/22(Tue) 23:36
コンピュータ・インターネット | Comment | trackback (0)
blog comments powered by Disqus

トラックバック

トラックバックURL取得

Tools