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

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

C# と VB.NET の入門サイト

Re[4]: ByValの動作について


(過去ログ 27 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■12626 / inTopicNo.1)  ByValの動作について
  
□投稿者/ hammer (1回)-(2008/01/13(Sun) 14:39:55)

分類:[VB.NET/VB2005] 

ByValの動作についてですが、例えば

Public Function Func(ByVal obj As SomeObject) As Int32
    ' 本体
End Function

のようにした場合、参照の値渡しが行われるのでしょうか?
それとも、中身がコピーされたものが渡されるのでしょうか?

よろしくお願いします。

引用返信 編集キー/
■12632 / inTopicNo.2)  Re[1]: ByValの動作について
□投稿者/ Hongliang (223回)-(2008/01/13(Sun) 17:06:07)
Hongliang さんの Web サイト
そこまでわかってるならあとは自分で試すだけだと思いますが。
引用返信 編集キー/
■12633 / inTopicNo.3)  Re[2]: ByValの動作について
□投稿者/ hammer (2回)-(2008/01/13(Sun) 17:10:50)
No12632 (Hongliang さん) に返信
> そこまでわかってるならあとは自分で試すだけだと思いますが。

参照の値渡しが行われているかコピーが行われているかを試す方法が思いつかないため、
ここで質問させていただきました。

何かいい方法があるのなら教えてもらえないでしょうか?
引用返信 編集キー/
■12634 / inTopicNo.4)  Re[3]: ByValの動作について
□投稿者/ Azulean (7回)-(2008/01/13(Sun) 17:22:59)
> 何かいい方法があるのなら教えてもらえないでしょうか?
メソッド(関数)の中でその引数を書き換えて、呼び出し元でも同様に変化しているかを確認すれば良いのでは?
クラスと構造体で動きの違いを見れば良いと思います。
引用返信 編集キー/
■12635 / inTopicNo.5)  Re[4]: ByValの動作について
□投稿者/ hammer (3回)-(2008/01/13(Sun) 17:26:15)
No12634 (Azulean さん) に返信
>>何かいい方法があるのなら教えてもらえないでしょうか?
> メソッド(関数)の中でその引数を書き換えて、呼び出し元でも同様に変化しているかを確認すれば良いのでは?
> クラスと構造体で動きの違いを見れば良いと思います。

なるほど、試してみます。
ありがとうございます。
引用返信 編集キー/
■12636 / inTopicNo.6)  Re[5]: ByValの動作について
□投稿者/ hammer (4回)-(2008/01/13(Sun) 17:37:13)
No12635 (hammer さん) に返信
> ■No12634 (Azulean さん) に返信
> >>何かいい方法があるのなら教えてもらえないでしょうか?
>>メソッド(関数)の中でその引数を書き換えて、呼び出し元でも同様に変化しているかを確認すれば良いのでは?
>>クラスと構造体で動きの違いを見れば良いと思います。
> 
> なるほど、試してみます。
> ありがとうございます。

やってみたところ、参照の値渡しのようです。
回答してくださったお二方、ありがとうございました。

<TestFixture()> _
Public Class KlassTest
    Class Klass
        Dim a As Int32

        Sub New()
            a = 100
        End Sub

        Shared Sub S(ByVal k As Klass)
            s.a = 200
        End Sub

        Function F() As Int32
            Return a
        End Function
    End Class

    <Test()> _
    Public Sub Test()
        Dim k As Klass = new Klass
        Klass.S(k)
        Assert.AreEqual(200, k.F())
    End Sub
End Class

解決済み
引用返信 編集キー/
■12649 / inTopicNo.7)  Re[4]: ByValの動作について
□投稿者/ 倉田 有大 (110回)-(2008/01/14(Mon) 00:52:43)
No12634 (Azulean さん) に返信
>>何かいい方法があるのなら教えてもらえないでしょうか?
> メソッド(関数)の中でその引数を書き換えて、呼び出し元でも同様に変化しているかを確認すれば良いのでは?
> クラスと構造体で動きの違いを見れば良いと思います。

そういえば私、クラスのbyvalとbyref渡しの違い理解してない
何年c#つかってんねん!
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -