質問編集履歴
5
コードの修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
{
|
17
17
|
public static void Main()
|
18
18
|
{
|
19
|
-
Console.WriteLine(
|
19
|
+
Console.WriteLine(createInstance(1).Name);
|
20
20
|
Console.WriteLine(createInstance(2).Name);
|
21
21
|
}
|
22
22
|
|
4
サンプルコードのコメントを追加した
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
追記した
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
例を変えた
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
|
-
|
6
|
+
Class1, Class2, ... のように連続する名前のクラスを作りました。
|
8
7
|
|
9
8
|
そしてこれらのインスタンスを生成するコードも書きました。
|
10
|
-
Program::
|
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(
|
19
|
+
Console.WriteLine(createInstancer(1).Name);
|
21
|
-
Console.WriteLine(
|
20
|
+
Console.WriteLine(createInstance(2).Name);
|
22
21
|
}
|
23
22
|
|
24
|
-
public static
|
23
|
+
public static ClassBase createInstance(int num)
|
25
|
-
=> Activator.CreateInstance(Type.GetType($"
|
24
|
+
=> Activator.CreateInstance(Type.GetType($"Class{num}")) as ClassBase;
|
26
25
|
}
|
27
26
|
|
28
|
-
abstract class
|
27
|
+
abstract class ClassBase
|
29
28
|
{
|
30
29
|
public abstract string Name { get; }
|
31
30
|
}
|
32
31
|
|
33
|
-
class
|
32
|
+
class Class1 : ClassBase
|
34
33
|
{
|
35
34
|
public override string Name
|
36
|
-
=> "
|
35
|
+
=> "クラス1";
|
37
36
|
}
|
38
37
|
|
39
|
-
class
|
38
|
+
class Class2 : ClassBase
|
40
39
|
{
|
41
40
|
public override string Name
|
42
|
-
=> "
|
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(
|
61
|
+
Console.WriteLine(createInstance(1).Name);
|
63
|
-
Console.WriteLine(
|
62
|
+
Console.WriteLine(createInstance(2).Name);
|
64
63
|
}
|
65
64
|
|
66
|
-
public static
|
65
|
+
public static ClassBase createInstance(int num)
|
67
66
|
{
|
68
|
-
switch (
|
67
|
+
switch (num)
|
69
68
|
{
|
70
69
|
case 1:
|
71
|
-
return new
|
70
|
+
return new Class1();
|
72
71
|
|
73
72
|
case 2:
|
74
|
-
return new
|
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
|
81
|
+
abstract class ClassBase
|
83
82
|
{
|
84
83
|
public abstract string Name { get; }
|
85
84
|
}
|
86
85
|
|
87
|
-
class
|
86
|
+
class Class1 : ClassBase
|
88
87
|
{
|
89
88
|
public override string Name
|
90
|
-
=> "
|
89
|
+
=> "クラス1";
|
91
90
|
}
|
92
91
|
|
93
|
-
class
|
92
|
+
class Class2 : ClassrBase
|
94
93
|
{
|
95
94
|
public override string Name
|
96
|
-
=> "
|
95
|
+
=> "クラス2";
|
97
96
|
}
|
98
97
|
```
|
99
98
|
確かにコード2はコード1に比べて安全になったのかもしれませんが、
|
100
99
|
コードを書く量が増えました。
|
101
100
|
|
102
|
-
コード1中のProgram::
|
101
|
+
コード1中のProgram::createInstanceは
|
103
|
-
|
102
|
+
ClassBaseの派生クラスの数がどれだけ増えても1行、
|
104
103
|
例外を対処するコードを入れたとしても
|
105
104
|
それほど量は増えないでしょう。
|
106
105
|
|
107
|
-
それに対して、コード2中のProgram::
|
106
|
+
それに対して、コード2中のProgram::createInstanceは
|
108
|
-
|
107
|
+
ClassBaseの派生クラスの数が増えれば増えるほど
|
109
108
|
コードが長くなります。
|
110
109
|
|
111
|
-
たとえば
|
110
|
+
たとえば Class1 から Class718 までクラスがあるとすると
|
112
111
|
コード2の書き方でいけば
|
113
|
-
Program::
|
112
|
+
Program::createInstanceは2159行にもなることが予想されます。
|
114
113
|
|
115
114
|
いくら安全性のためとはいえ
|
116
115
|
これは大変だと思います。
|
1
なんとなく
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
|
いくら安全性のためとはいえ
|