teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2016/06/27 03:11

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -5,4 +5,40 @@
5
5
 
6
6
  例えば、呼び出し元が Hoge1 を作成して変数 a1 にセットして A を呼び出し、A の中で Hoge2 を作成して引数と戻り値にセットしたとします。
7
7
  呼び出し元は A の戻り値を変数 a2 に代入します。
8
- この場合、a1 の値は Hoge1 であって、Hoge2 ではありません。
8
+ この場合、a1 の値は Hoge1 であって、Hoge2 ではありません。
9
+
10
+ ### 追記
11
+ 実験してみました。
12
+ 出力は
13
+ Hi
14
+ Hi
15
+ となります。
16
+ 私の間違いです。いい加減なことを書いて申し訳ありませんでした。
17
+ ```VB
18
+ Imports System
19
+ Imports System.IO
20
+
21
+ Public Class Caller
22
+ Public Shared Sub Main()
23
+ Dim Hoge1 As New Hoge
24
+ Dim Hoge2 As Hoge
25
+
26
+ Hoge1.Message = "Hello"
27
+ Hoge2 = A(Hoge1)
28
+ Console.WriteLine(Hoge1.Message)
29
+ Console.WriteLine(Hoge2.Message)
30
+ End Sub
31
+
32
+ Private Shared Function A(ByRef hoge As Hoge) As Hoge
33
+ Dim Result As New Hoge
34
+
35
+ Result.Message = "Hi"
36
+ hoge = Result
37
+ Return Result
38
+ End Function
39
+ End Class
40
+
41
+ Public Class Hoge
42
+ Public Message As String
43
+ End Class
44
+ ```

1

追記

2016/06/27 03:11

投稿

Zuishin
Zuishin

スコア28675

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