回答編集履歴

2

追記

2016/06/27 03:11

投稿

Zuishin
Zuishin

スコア28662

test CHANGED
@@ -13,3 +13,75 @@
13
13
  呼び出し元は A の戻り値を変数 a2 に代入します。
14
14
 
15
15
  この場合、a1 の値は Hoge1 であって、Hoge2 ではありません。
16
+
17
+
18
+
19
+ ### 追記
20
+
21
+ 実験してみました。
22
+
23
+ 出力は
24
+
25
+ Hi
26
+
27
+ Hi
28
+
29
+ となります。
30
+
31
+ 私の間違いです。いい加減なことを書いて申し訳ありませんでした。
32
+
33
+ ```VB
34
+
35
+ Imports System
36
+
37
+ Imports System.IO
38
+
39
+
40
+
41
+ Public Class Caller
42
+
43
+ Public Shared Sub Main()
44
+
45
+ Dim Hoge1 As New Hoge
46
+
47
+ Dim Hoge2 As Hoge
48
+
49
+
50
+
51
+ Hoge1.Message = "Hello"
52
+
53
+ Hoge2 = A(Hoge1)
54
+
55
+ Console.WriteLine(Hoge1.Message)
56
+
57
+ Console.WriteLine(Hoge2.Message)
58
+
59
+ End Sub
60
+
61
+
62
+
63
+ Private Shared Function A(ByRef hoge As Hoge) As Hoge
64
+
65
+ Dim Result As New Hoge
66
+
67
+
68
+
69
+ Result.Message = "Hi"
70
+
71
+ hoge = Result
72
+
73
+ Return Result
74
+
75
+ End Function
76
+
77
+ End Class
78
+
79
+
80
+
81
+ Public Class Hoge
82
+
83
+ Public Message As String
84
+
85
+ End Class
86
+
87
+ ```

1

追記

2016/06/27 03:11

投稿

Zuishin
Zuishin

スコア28662

test CHANGED
@@ -1,3 +1,15 @@
1
1
  dsTest はメソッド A を呼び出す前に呼び出し側が初期化しなくてはなりません。
2
2
 
3
3
  メソッド A 内で作られたものは破棄され、呼び出し側には戻りません。
4
+
5
+
6
+
7
+ もちろん、戻り値として呼び出し側に戻したものは別です。
8
+
9
+
10
+
11
+ 例えば、呼び出し元が Hoge1 を作成して変数 a1 にセットして A を呼び出し、A の中で Hoge2 を作成して引数と戻り値にセットしたとします。
12
+
13
+ 呼び出し元は A の戻り値を変数 a2 に代入します。
14
+
15
+ この場合、a1 の値は Hoge1 であって、Hoge2 ではありません。