回答編集履歴

2

修正

2018/02/18 13:15

投稿

Zuishin
Zuishin

スコア28669

test CHANGED
@@ -184,14 +184,18 @@
184
184
 
185
185
  ですから s を出力した結果は Hello になります。
186
186
 
187
+ s の値である string オブジェクト(参照型)を渡しているので値渡しです。
188
+
187
189
 
188
190
 
189
191
  ChangeRef() でも t を書き換えています。
190
192
 
191
193
  これにより s は t と同じ値である World になります。
192
194
 
193
-
195
+ s の値ではなく参照を渡しています。
194
196
 
195
197
  これが参照渡しです。
196
198
 
199
+
200
+
197
201
  string は参照型ですが、値型を用いても全く結果は同じです。

1

追記

2018/02/18 13:15

投稿

Zuishin
Zuishin

スコア28669

test CHANGED
@@ -101,3 +101,97 @@
101
101
  メソッドの中で変数の中身自体を変えています。
102
102
 
103
103
  これが参照渡しです。
104
+
105
+
106
+
107
+ ### 追記
108
+
109
+
110
+
111
+ 質問の追記を受けて。
112
+
113
+
114
+
115
+ ```C#
116
+
117
+ void Start()
118
+
119
+ {
120
+
121
+ string s = "Hello";
122
+
123
+ Console.WriteLine(s); // Hello
124
+
125
+ ChangeNoRef(s);
126
+
127
+ Console.WriteLine(s); // Hello
128
+
129
+ ChangeRef(ref s);
130
+
131
+ Console.WriteLine(s); // World
132
+
133
+ }
134
+
135
+
136
+
137
+ void ChangeNoRef(string t)
138
+
139
+ {
140
+
141
+ t = "World";
142
+
143
+ }
144
+
145
+
146
+
147
+ void ChangeRef(ref string t)
148
+
149
+ {
150
+
151
+ t = "World";
152
+
153
+ }
154
+
155
+ ```
156
+
157
+
158
+
159
+ この場合、出力は次のようになります。
160
+
161
+
162
+
163
+ ```
164
+
165
+ Hello
166
+
167
+ Hello
168
+
169
+ World
170
+
171
+ ```
172
+
173
+
174
+
175
+ string は List<T> と同じく参照型です。
176
+
177
+ 同じ挙動になると思ってください。
178
+
179
+
180
+
181
+ ChangeNoRef() でパラメータである t を書き換えています。
182
+
183
+ しかし t はメソッド内ローカルであり、もともとの s に影響を及ぼしません。
184
+
185
+ ですから s を出力した結果は Hello になります。
186
+
187
+
188
+
189
+ ChangeRef() でも t を書き換えています。
190
+
191
+ これにより s は t と同じ値である World になります。
192
+
193
+
194
+
195
+ これが参照渡しです。
196
+
197
+ string は参照型ですが、値型を用いても全く結果は同じです。