特になし

とりとめもなくダラダラ書いてみようという感じ・・・

全体表示

[ リスト ]

Visual Basic その 2

先日、Visual Basic について次のように書いた。 
話は変わるが、Visual Basic では関数、メソッド等の引数に ByVal や ByRef を指定することができる。
これが、私にとっては非常に謎な仕様だ。
Integer などの値型に対して、ByVal を指定すると値渡しになり、ByRef にすると参照渡しになる。
これは非常によくわかる。
しかし、String 以外の参照型に対しては、ByVal を指定しても問答無用で参照渡しになる。
しかも、String 以外の参照型に対して ByVal を指定しても、エラーはおろか警告にもならない。
 しかし、これは間違った解釈だったことがわかった。何気なく「独習 Visual Basic 2008 」をパラパラと斜め読みしていたのだが、「参照型の変数を ByVal で渡すと参照のコピーが関数に渡される」ということが書かれていた。
なるほど、だった。つまり、C/C++ でポインタを渡すのと同じことである。
String 型以外の参照型の引数の場合、ByVal で渡そうが ByRef で渡そうが、関数やメソッドが受け取るのは、あくまで参照であって受け取る内容、つまり、参照先のアドレスは変わらないのである。
これなら、 参照型の引数に対して ByVal を指定してもエラーにも警告にもならないのが納得できる。
どうして今までそのことに気がつかなかったのだろうと思う。(たぶん、String 型の挙動に惑わされていたのだろう。)
 
しかし、それにしても、である。String 型と String 型以外の扱いの違いは何なのだろう。
String 型に対しては ByVal で渡すと、参照ではなく実体がコピーされているのだ。
謎が深まる・・・。

閉じる コメント(0)

コメント投稿

顔アイコン

顔アイコン・表示画像の選択

名前パスワードブログ
絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

開く トラックバック(0)


.


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事