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

回答編集履歴

1

追記1

2018/08/04 10:24

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
@@ -4,4 +4,65 @@
4
4
 
5
5
  ここには Animalとやらもないし、Animal.Big.Cute.Panda とやらもない。
6
6
 
7
- まぁ、Animalに関してはまだいいとして、Animal.Big.Cute.Panda とやらが余計にわからん。
7
+ まぁ、Animalに関してはまだいいとして、Animal.Big.Cute.Panda とやらが余計にわからん。
8
+
9
+ ---
10
+
11
+ [追記1]
12
+
13
+ ```C#
14
+ public List<Animal> animalList = new List<Animal>();
15
+
16
+ public void Test(string data)
17
+ {
18
+         //ここでなんだかんだでデータを読み取って動物を特定する
19
+
20
+ Animal.Big.Cute.Panda シンシン = new Animal.Big.CUte();
21
+ animalList.Add(シンシン); //これやるとエラーとなる
22
+ //"Animal.Big.Cute.PandaからAnimalへ変換できません"エラーが出る
23
+ }
24
+
25
+ public class Animal
26
+ {
27
+ public class Big
28
+ {
29
+ public class Cute
30
+ {
31
+ public class Panda
32
+ {
33
+ }
34
+ }
35
+ }
36
+ }
37
+ ```
38
+
39
+ ですよね?
40
+
41
+ それなら当り前です。
42
+
43
+ クラス内のクラス ( 内部クラス? ) では無理です。
44
+ どうしても Animal で保持したいなら
45
+
46
+ ```C#
47
+ public List<Animal> animals = new List<Animal>();
48
+
49
+ public void Test( string data ){
50
+ // ここでなんだかんだで...
51
+ Panda SinSin = new Panda();
52
+ // 若しくは
53
+ // Animal SinSin = new Panda() としてもいい
54
+ animals.add( SinSin );
55
+ }
56
+
57
+ public class Animal{
58
+ // フィールドやらメソッドやらがある
59
+ }
60
+
61
+ public class Panda : Animal{
62
+ // フィールドやらメソッドやらがある
63
+ }
64
+ ```
65
+
66
+ のように「**継承**」によって行います。これでいわゆるポリモーフィズムとやらができる。
67
+
68
+ デザインパターンの**Factoryパターン**辺りをチェックしてください。