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

回答編集履歴

4

追記を受けて注意事項を追記

2020/11/25 08:33

投稿

Automatic9045
Automatic9045

スコア313

answer CHANGED
@@ -1,4 +1,4 @@
1
- ジェネリッククラス(ClassName<T>)を使ってみてはいかがでしょう?
1
+ ジェネリッククラス(`ClassName<T>`)を使ってみてはいかがでしょう?
2
2
  インスタンス化する際に型を指定出来ます。
3
3
 
4
4
  ```C#
@@ -23,4 +23,23 @@
23
23
  a.MyMethod("aaa");
24
24
  }
25
25
  }
26
+ ```
27
+
28
+ ##追記を受けて
29
+ ジェネリッククラスを用いれば、コンストラクタの引数は不要になります。
30
+ 型パラメータTの型は`typeof(T)`で取得出来るので、初期化処理は以下のように書けます。
31
+ ```C#
32
+ // Linqを用いると、繰り返し系の処理をfor無しで可読性高く書けます。
33
+ // また、C#では変数名はローワーキャメルが原則なのでご注意を。
34
+
35
+ public A()
36
+ {
37
+ switch (typeof(T))
38
+ {
39
+ case typeof(string):
40
+ strList = new List<string>(Enumerable.Repeat(string.Empty, listSize));
41
+ break;
42
+ ...
43
+ }
44
+ }
26
45
  ```

3

サンプルコードにコンストラクタを追加

2020/11/25 08:33

投稿

Automatic9045
Automatic9045

スコア313

answer CHANGED
@@ -4,6 +4,11 @@
4
4
  ```C#
5
5
  public class MyClass<T>
6
6
  {
7
+ public MyClass(T arg)
8
+ {
9
+ ...
10
+ }
11
+
7
12
  public void MyMethod(T arg)
8
13
  {
9
14
  ...
@@ -14,7 +19,7 @@
14
19
  {
15
20
  static void Main(string[] args)
16
21
  {
17
- MyClass<string> a = new MyClass<string>();
22
+ MyClass<string> a = new MyClass<string>("hoge");
18
23
  a.MyMethod("aaa");
19
24
  }
20
25
  }

2

staticを書く位置が間違っていたので修正

2020/11/25 07:42

投稿

Automatic9045
Automatic9045

スコア313

answer CHANGED
@@ -10,9 +10,9 @@
10
10
  }
11
11
  }
12
12
 
13
- static class MainClass
13
+ class MainClass
14
14
  {
15
- void Main(string[] args)
15
+ static void Main(string[] args)
16
16
  {
17
17
  MyClass<string> a = new MyClass<string>();
18
18
  a.MyMethod("aaa");

1

サンプルコードを追加

2020/11/25 06:38

投稿

Automatic9045
Automatic9045

スコア313

answer CHANGED
@@ -1,2 +1,21 @@
1
- Class<T>の型を使ってみてはいかがでしょう?
1
+ ジェネリッククラス(ClassName<T>を使ってみてはいかがでしょう?
2
- インスタンス化する際に型を指定出来ます。
2
+ インスタンス化する際に型を指定出来ます。
3
+
4
+ ```C#
5
+ public class MyClass<T>
6
+ {
7
+ public void MyMethod(T arg)
8
+ {
9
+ ...
10
+ }
11
+ }
12
+
13
+ static class MainClass
14
+ {
15
+ void Main(string[] args)
16
+ {
17
+ MyClass<string> a = new MyClass<string>();
18
+ a.MyMethod("aaa");
19
+ }
20
+ }
21
+ ```