質問編集履歴
5
コードの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -34,7 +34,7 @@
|
|
34
34
|
|
35
35
|
{
|
36
36
|
|
37
|
-
Console.WriteLine(createInstance
|
37
|
+
Console.WriteLine(createInstance(1).Name);
|
38
38
|
|
39
39
|
Console.WriteLine(createInstance(2).Name);
|
40
40
|
|
4
サンプルコードのコメントを追加した
test
CHANGED
File without changes
|
test
CHANGED
@@ -42,6 +42,8 @@
|
|
42
42
|
|
43
43
|
|
44
44
|
|
45
|
+
// インスタンスを生成する (例外に対する処理は今回は省いてあります)
|
46
|
+
|
45
47
|
public static ClassBase createInstance(int num)
|
46
48
|
|
47
49
|
=> Activator.CreateInstance(Type.GetType($"Class{num}")) as ClassBase;
|
3
追記した
test
CHANGED
File without changes
|
test
CHANGED
@@ -241,3 +241,13 @@
|
|
241
241
|
・それ以外のやり方
|
242
242
|
|
243
243
|
どのように書きますか。
|
244
|
+
|
245
|
+
|
246
|
+
|
247
|
+
追記
|
248
|
+
|
249
|
+
例を変えました。
|
250
|
+
|
251
|
+
あと、「必ずしもクラスにする必要は無いのではないか?」
|
252
|
+
|
253
|
+
という回答もやめてください。
|
2
例を変えた
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,22 +1,20 @@
|
|
1
|
-
C#初心者で
|
1
|
+
C#初心者です。
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
-
|
5
|
+
複数のクラスのインスタンスを生成する方法について考えていました。
|
6
6
|
|
7
7
|
|
8
8
|
|
9
9
|
最初に考えたコードをコード1に示します。
|
10
10
|
|
11
|
-
各モンスターごとにクラスを作り、
|
12
|
-
|
13
|
-
|
11
|
+
Class1, Class2, ... のように連続する名前のクラスを作りました。
|
14
12
|
|
15
13
|
|
16
14
|
|
17
15
|
そしてこれらのインスタンスを生成するコードも書きました。
|
18
16
|
|
19
|
-
Program::create
|
17
|
+
Program::createInstanceがそれです。
|
20
18
|
|
21
19
|
```C#
|
22
20
|
|
@@ -36,23 +34,23 @@
|
|
36
34
|
|
37
35
|
{
|
38
36
|
|
39
|
-
Console.WriteLine(create
|
37
|
+
Console.WriteLine(createInstancer(1).Name);
|
40
|
-
|
38
|
+
|
41
|
-
Console.WriteLine(create
|
39
|
+
Console.WriteLine(createInstance(2).Name);
|
42
40
|
|
43
41
|
}
|
44
42
|
|
45
43
|
|
46
44
|
|
47
|
-
public static
|
45
|
+
public static ClassBase createInstance(int num)
|
48
|
-
|
46
|
+
|
49
|
-
=> Activator.CreateInstance(Type.GetType($"
|
47
|
+
=> Activator.CreateInstance(Type.GetType($"Class{num}")) as ClassBase;
|
50
|
-
|
48
|
+
|
51
|
-
}
|
49
|
+
}
|
52
|
-
|
53
|
-
|
54
|
-
|
50
|
+
|
51
|
+
|
52
|
+
|
55
|
-
abstract class
|
53
|
+
abstract class ClassBase
|
56
54
|
|
57
55
|
{
|
58
56
|
|
@@ -62,25 +60,25 @@
|
|
62
60
|
|
63
61
|
|
64
62
|
|
65
|
-
class
|
63
|
+
class Class1 : ClassBase
|
66
|
-
|
64
|
+
|
67
|
-
{
|
65
|
+
{
|
68
|
-
|
66
|
+
|
69
|
-
public override string Name
|
67
|
+
public override string Name
|
70
|
-
|
68
|
+
|
71
|
-
=> "
|
69
|
+
=> "クラス1";
|
72
|
-
|
70
|
+
|
73
|
-
}
|
71
|
+
}
|
74
|
-
|
75
|
-
|
76
|
-
|
72
|
+
|
73
|
+
|
74
|
+
|
77
|
-
class
|
75
|
+
class Class2 : ClassBase
|
78
|
-
|
76
|
+
|
79
|
-
{
|
77
|
+
{
|
80
|
-
|
78
|
+
|
81
|
-
public override string Name
|
79
|
+
public override string Name
|
82
|
-
|
80
|
+
|
83
|
-
=> "
|
81
|
+
=> "クラス2";
|
84
82
|
|
85
83
|
}
|
86
84
|
|
@@ -120,31 +118,31 @@
|
|
120
118
|
|
121
119
|
{
|
122
120
|
|
123
|
-
Console.WriteLine(create
|
121
|
+
Console.WriteLine(createInstance(1).Name);
|
124
|
-
|
122
|
+
|
125
|
-
Console.WriteLine(create
|
123
|
+
Console.WriteLine(createInstance(2).Name);
|
126
124
|
|
127
125
|
}
|
128
126
|
|
129
127
|
|
130
128
|
|
131
|
-
public static
|
129
|
+
public static ClassBase createInstance(int num)
|
132
130
|
|
133
131
|
{
|
134
132
|
|
135
|
-
switch (m
|
133
|
+
switch (num)
|
136
134
|
|
137
135
|
{
|
138
136
|
|
139
137
|
case 1:
|
140
138
|
|
141
|
-
return new
|
139
|
+
return new Class1();
|
142
140
|
|
143
141
|
|
144
142
|
|
145
143
|
case 2:
|
146
144
|
|
147
|
-
return new
|
145
|
+
return new Class2();
|
148
146
|
|
149
147
|
|
150
148
|
|
@@ -160,7 +158,7 @@
|
|
160
158
|
|
161
159
|
|
162
160
|
|
163
|
-
abstract class
|
161
|
+
abstract class ClassBase
|
164
162
|
|
165
163
|
{
|
166
164
|
|
@@ -170,25 +168,25 @@
|
|
170
168
|
|
171
169
|
|
172
170
|
|
173
|
-
class
|
171
|
+
class Class1 : ClassBase
|
174
|
-
|
172
|
+
|
175
|
-
{
|
173
|
+
{
|
176
|
-
|
174
|
+
|
177
|
-
public override string Name
|
175
|
+
public override string Name
|
178
|
-
|
176
|
+
|
179
|
-
=> "
|
177
|
+
=> "クラス1";
|
180
|
-
|
178
|
+
|
181
|
-
}
|
179
|
+
}
|
182
|
-
|
183
|
-
|
184
|
-
|
180
|
+
|
181
|
+
|
182
|
+
|
185
|
-
class
|
183
|
+
class Class2 : ClassrBase
|
186
|
-
|
184
|
+
|
187
|
-
{
|
185
|
+
{
|
188
|
-
|
186
|
+
|
189
|
-
public override string Name
|
187
|
+
public override string Name
|
190
|
-
|
188
|
+
|
191
|
-
=> "
|
189
|
+
=> "クラス2";
|
192
190
|
|
193
191
|
}
|
194
192
|
|
@@ -200,9 +198,9 @@
|
|
200
198
|
|
201
199
|
|
202
200
|
|
203
|
-
コード1中のProgram::create
|
201
|
+
コード1中のProgram::createInstanceは
|
204
|
-
|
202
|
+
|
205
|
-
|
203
|
+
ClassBaseの派生クラスの数がどれだけ増えても1行、
|
206
204
|
|
207
205
|
例外を対処するコードを入れたとしても
|
208
206
|
|
@@ -210,19 +208,19 @@
|
|
210
208
|
|
211
209
|
|
212
210
|
|
213
|
-
それに対して、コード2中のProgram::create
|
211
|
+
それに対して、コード2中のProgram::createInstanceは
|
214
|
-
|
212
|
+
|
215
|
-
|
213
|
+
ClassBaseの派生クラスの数が増えれば増えるほど
|
216
214
|
|
217
215
|
コードが長くなります。
|
218
216
|
|
219
217
|
|
220
218
|
|
221
|
-
たとえば
|
219
|
+
たとえば Class1 から Class718 までクラスがあるとすると
|
222
220
|
|
223
221
|
コード2の書き方でいけば
|
224
222
|
|
225
|
-
Program::create
|
223
|
+
Program::createInstanceは2159行にもなることが予想されます。
|
226
224
|
|
227
225
|
|
228
226
|
|
1
なんとなく
test
CHANGED
File without changes
|
test
CHANGED
@@ -220,7 +220,7 @@
|
|
220
220
|
|
221
221
|
たとえば Monster1 から Monster718 までクラスがあるとすると
|
222
222
|
|
223
|
-
コード2
|
223
|
+
コード2の書き方でいけば
|
224
224
|
|
225
225
|
Program::createMonsterは2159行にもなることが予想されます。
|
226
226
|
|