Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
コードの違いは何ですか?
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30488#CommentId83954
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
るきお
 (社会人)
投稿日時
2020/5/4 08:35:57
ByValの有無の違いについて
2点お伝えすることがあります。
1点目はsenderやeなどの引数の扱い方を示すキーワードとして、ByRef と ByVal があります。どちらも記述しなかった場合、ByVal が指定されたとみなされるということです。
つまり、もともと
(
ByVal
sender
As
Object
,
ByVal
e
As
EventArgs)
と
(sender
As
Object
, e
As
EventArgs)
は同じ意味でした。
2点目は、ByRefを使うケースはほとんどなく、ByValを使うケースが圧倒多数ということです。
以上2点を背景として、2010年ごろに自動生成されるプログラムが短くなるようにByValを省略したほうがいいのではないかという提案が1ユーザーからMicrosoftに寄せられ、これがVisual Studio 2010 SP1で採用されました。
今でもこの2つは同じ意味なのでどちらを記述してもかまいませんが、自動生成されるプログラムはByValを省きます。
ByValとByRefの機能上の違いは、ByValの場合、呼び出されたプロシージャ(Sub ~ End Sub, Function ~ End Functionの塊)の中で、引数の値を変更した場合、呼び出し元には影響しないのに対し、ByRefは呼び出しもとの引数も変更されるという違いがあります。
キーワードは 値渡しと参照渡しです。
参考
http://rucio.o.oo7.jp/main/dotnet/shokyu/standard34.htm
System. の有無の違いについて
もう1つの違い System. の有無は、私はあまり意識したことはありませんでした。
もともとObjectやEventArgsを含め、すべてのクラスや構造体は何かの名前空間に属しており、同じ名前のクラスが別の名前空間に存在することもあります。
たとえば、Point構造体は System.Drawing名前空間のPointと、System.Windows名前空間のPointがあり、機能が微妙に違います。
このような同じ名前のクラスとの混同を避けるために、名前空間も含めたフルネーム(完全修飾名)でクラス名を記述することがしばしばあり、それがObjectとSystem.Object、EventArgsとSystem.EventArgsの違いです。つまり、記述方法が違うだけで同じことを表現しています。