質問編集履歴

5

コードの修正

2016/05/21 14:35

投稿

aridai1221
aridai1221

スコア45

title CHANGED
File without changes
body CHANGED
@@ -16,7 +16,7 @@
16
16
  {
17
17
  public static void Main()
18
18
  {
19
- Console.WriteLine(createInstancer(1).Name);
19
+ Console.WriteLine(createInstance(1).Name);
20
20
  Console.WriteLine(createInstance(2).Name);
21
21
  }
22
22
 

4

サンプルコードのコメントを追加した

2016/05/21 14:34

投稿

aridai1221
aridai1221

スコア45

title CHANGED
File without changes
body CHANGED
@@ -20,6 +20,7 @@
20
20
  Console.WriteLine(createInstance(2).Name);
21
21
  }
22
22
 
23
+ // インスタンスを生成する (例外に対する処理は今回は省いてあります)
23
24
  public static ClassBase createInstance(int num)
24
25
  => Activator.CreateInstance(Type.GetType($"Class{num}")) as ClassBase;
25
26
  }

3

追記した

2016/05/21 14:27

投稿

aridai1221
aridai1221

スコア45

title CHANGED
File without changes
body CHANGED
@@ -119,4 +119,9 @@
119
119
  ・コード1のやり方
120
120
  ・コード2のやり方
121
121
  ・それ以外のやり方
122
- どのように書きますか。
122
+ どのように書きますか。
123
+
124
+ 追記
125
+ 例を変えました。
126
+ あと、「必ずしもクラスにする必要は無いのではないか?」
127
+ という回答もやめてください。

2

例を変えた

2016/05/21 14:19

投稿

aridai1221
aridai1221

スコア45

title CHANGED
File without changes
body CHANGED
@@ -1,13 +1,12 @@
1
- C#初心者でゲーム制作初心者です。
1
+ C#初心者です。
2
2
 
3
- ゲームでンスターの管理の仕方について考えていました。
3
+ 複数クラスのインスタンスを生成するについて考えていました。
4
4
 
5
5
  最初に考えたコードをコード1に示します。
6
- 各モンスターごとにクラスを作り、
7
- Monster1, Monster2, ... のように連続する名前をつけました。
6
+ Class1, Class2, ... のように連続する名前のクラス作りました。
8
7
 
9
8
  そしてこれらのインスタンスを生成するコードも書きました。
10
- Program::createMonsterがそれです。
9
+ Program::createInstanceがそれです。
11
10
  ```C#
12
11
  // コード1
13
12
 
@@ -17,29 +16,29 @@
17
16
  {
18
17
  public static void Main()
19
18
  {
20
- Console.WriteLine(createMonster(1).Name);
19
+ Console.WriteLine(createInstancer(1).Name);
21
- Console.WriteLine(createMonster(2).Name);
20
+ Console.WriteLine(createInstance(2).Name);
22
21
  }
23
22
 
24
- public static MonsterBase createMonster(int monsterId)
23
+ public static ClassBase createInstance(int num)
25
- => Activator.CreateInstance(Type.GetType($"Monster{monsterId}")) as MonsterBase;
24
+ => Activator.CreateInstance(Type.GetType($"Class{num}")) as ClassBase;
26
25
  }
27
26
 
28
- abstract class MonsterBase
27
+ abstract class ClassBase
29
28
  {
30
29
  public abstract string Name { get; }
31
30
  }
32
31
 
33
- class Monster1 : MonsterBase
32
+ class Class1 : ClassBase
34
33
  {
35
34
  public override string Name
36
- => "モンター1";
35
+ => "クラス1";
37
36
  }
38
37
 
39
- class Monster2 : MonsterBase
38
+ class Class2 : ClassBase
40
39
  {
41
40
  public override string Name
42
- => "モンター2";
41
+ => "クラス2";
43
42
  }
44
43
  ```
45
44
  例外処理などは省きましたが、このような感じです。
@@ -59,19 +58,19 @@
59
58
  {
60
59
  public static void Main()
61
60
  {
62
- Console.WriteLine(createMonster(1).Name);
61
+ Console.WriteLine(createInstance(1).Name);
63
- Console.WriteLine(createMonster(2).Name);
62
+ Console.WriteLine(createInstance(2).Name);
64
63
  }
65
64
 
66
- public static MonsterBase createMonster(int monsterId)
65
+ public static ClassBase createInstance(int num)
67
66
  {
68
- switch (monsterId)
67
+ switch (num)
69
68
  {
70
69
  case 1:
71
- return new Monster1();
70
+ return new Class1();
72
71
 
73
72
  case 2:
74
- return new Monster2();
73
+ return new Class2();
75
74
 
76
75
  default:
77
76
  return null;
@@ -79,38 +78,38 @@
79
78
  }
80
79
  }
81
80
 
82
- abstract class MonsterBase
81
+ abstract class ClassBase
83
82
  {
84
83
  public abstract string Name { get; }
85
84
  }
86
85
 
87
- class Monster1 : MonsterBase
86
+ class Class1 : ClassBase
88
87
  {
89
88
  public override string Name
90
- => "モンター1";
89
+ => "クラス1";
91
90
  }
92
91
 
93
- class Monster2 : MonsterBase
92
+ class Class2 : ClassrBase
94
93
  {
95
94
  public override string Name
96
- => "モンター2";
95
+ => "クラス2";
97
96
  }
98
97
  ```
99
98
  確かにコード2はコード1に比べて安全になったのかもしれませんが、
100
99
  コードを書く量が増えました。
101
100
 
102
- コード1中のProgram::createMonster
101
+ コード1中のProgram::createInstance
103
- MonsterBaseの派生クラスの数がどれだけ増えても1行、
102
+ ClassBaseの派生クラスの数がどれだけ増えても1行、
104
103
  例外を対処するコードを入れたとしても
105
104
  それほど量は増えないでしょう。
106
105
 
107
- それに対して、コード2中のProgram::createMonster
106
+ それに対して、コード2中のProgram::createInstance
108
- MonsterBaseの派生クラスの数が増えれば増えるほど
107
+ ClassBaseの派生クラスの数が増えれば増えるほど
109
108
  コードが長くなります。
110
109
 
111
- たとえば Monster1 から Monster718 までクラスがあるとすると
110
+ たとえば Class1 から Class718 までクラスがあるとすると
112
111
  コード2の書き方でいけば
113
- Program::createMonsterは2159行にもなることが予想されます。
112
+ Program::createInstanceは2159行にもなることが予想されます。
114
113
 
115
114
  いくら安全性のためとはいえ
116
115
  これは大変だと思います。

1

なんとなく

2016/05/21 14:17

投稿

aridai1221
aridai1221

スコア45

title CHANGED
File without changes
body CHANGED
@@ -109,7 +109,7 @@
109
109
  コードが長くなります。
110
110
 
111
111
  たとえば Monster1 から Monster718 までクラスがあるとすると
112
- コード2 の書き方でいけば
112
+ コード2の書き方でいけば
113
113
  Program::createMonsterは2159行にもなることが予想されます。
114
114
 
115
115
  いくら安全性のためとはいえ