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

回答編集履歴

1

コメントを受けて追記

2017/12/03 04:15

投稿

sakura_hana
sakura_hana

スコア11429

answer CHANGED
@@ -6,4 +6,48 @@
6
6
  この挙動だとsetterとしての挙動が正しいので、命名も見直すべきかと思います。
7
7
 
8
8
  余談ですが、static publicな変数は直接`int resulthit = GameManager.hitpoint;`のような形で呼び出せます。
9
- getter/setterを使うならstatic privateにした方がいいかと思います。
9
+ getter/setterを使うならstatic privateにした方がいいかと思います。
10
+
11
+ ---
12
+ 2017/12/03 13:15 コメントを受けて追記
13
+
14
+ 諸々根本的に思い違いされていそうです。
15
+ int型はstaticかそうでないかに関わらず値参照です。現状のコードは以下のような意味になります。
16
+ ```C#
17
+ int i = hitpoint; //iにhitpointの値を入れる(hitpointの参照が渡されているわけではない)……※
18
+ getHitPoint(i); //getHitPointにiの値を渡す(iの参照が渡されているわけでない)
19
+ public static int getHitPoint(int i) //iに入った値を受け取る。※のiとは全く別の変数である
20
+ {
21
+ return i; //渡された値をそのまま返す(getHitPointとも、※のiとも無関係)
22
+ }
23
+ ```
24
+
25
+ 「参照が渡されているわけではない」というのは、例えば
26
+ ```C#
27
+ hitpoint = 0; //hitpoint=0、iは未定義
28
+ int i = hitpoint; //hitpoint=0、i=0
29
+ hitpoint = 1; //hitpoint=1、i=0
30
+ ```
31
+ という意味です。(最後の処理でi=1にはならない)
32
+
33
+ 恐らくこうしたいのではないか、というソースを書くとすると以下になります。
34
+ ```C#
35
+ //GameManager.cs
36
+ private static int hitpoint = 0;
37
+ public static int getHitPoint()
38
+ {
39
+ return hitpoint;
40
+ }
41
+ public static void setHitPoint(int i)
42
+ {
43
+ hitpoint = i; //敢えてsetter作りましたが、特に複雑な処理をしないなら直接代入してもいいかと思います。
44
+ }
45
+ //セットする部分
46
+ setHitPoint(0); //そもそも区別値はどこから設定するのか不明なのでとりあえずこうしています。
47
+
48
+ //Controller.cs
49
+ int resulthit = GameManager.getHitPoint();
50
+ ```
51
+
52
+ なお、質問文のソースが編集されていますが、最初の回答と噛み合わなくなってしまうので、
53
+ 編集前の内容を残すか追記として書いてくださると後から見た人の参考になりやすいです。