質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

940閲覧

動物インスタンスのリストを実現するには

gamu

総合スコア31

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2018/08/04 09:05

編集2018/08/04 09:58

ある動物園があって、そこにはいろいろな動物がいます。
そのデータが記述されたテキストデータが手元にあります。
そのテキスト内のデータを各種動物のインスタンスとして生成します。
それらをリストに追加して管理しようとします。

しかし調べようにも例が見つからず、どのようなキーワードがいいのかもわからず困っています。

私が試みた手法は、
Animalクラスの中に内部クラスをどんどん作って動物を分類したクラスを作ります。
それらを集める為のanimalListを用意します。ここに動物を放り込もうとします。

C#

1 public List<Animal> animalList = new List<Animal>(); 2 3 public void Test(string data) 4 { 5        //ここでなんだかんだでデータを読み取って動物を特定する 6 7 Animal.Big.Cute.Panda シンシン = new Animal.Big.CUte(); 8 animalList.Add(シンシン); //これやるとエラーとなる 9 //"Animal.Big.Cute.PandaからAnimalへ変換できません"エラーが出る 10 } 11 12 public class Animal 13 { 14 public class Big 15 { 16 public class Cute 17 { 18 public class Panda 19 { 20 } 21 } 22 } 23 } 24 25 26

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

僕ならこうする

C#

1// Big,Cute は Animal ではない 2public interface Big {} 3public interface Cute {} 4 5// Panda は Animal で、しかもBig で Cute だ 6public class Animal {} 7public class Panda : Animal, Big, Cute {} 8 9public class Vehicle {} // 乗り物 10public class Trailer : Vehicle, Big {] // トレーラーはBigな乗り物 11... 12// 動物園にPandaが仲間入り! 13public List<Animal> zoo = new List<Animal>(); 14zoo.add( new Panda() );

投稿2018/08/04 10:56

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gamu

2018/08/04 13:10

たしかにBigは動物とは限りません。 interfaceについては教本を読んではいるのですがなぜか自分には関係のない機能のように思えていました。 しかしこのように具体的な使い道を知るのは初めてで、たいへん興味深かったです。 ご回答ありがとうございました。
episteme

2018/08/04 13:19

C# は多重継承できんので、この例では class 馬 : Animal, Vehicle とできんけどね。
guest

0

記述するならちゃんと書いてください。

エラーメッセージらしきものが "Animal.Big.Cute.PandaからAnimalへ変換できません" ですが、

ここには Animalとやらもないし、Animal.Big.Cute.Panda とやらもない。

まぁ、Animalに関してはまだいいとして、Animal.Big.Cute.Panda とやらが余計にわからん。


[追記1]

C#

1 public List<Animal> animalList = new List<Animal>(); 2 3 public void Test(string data) 4 { 5        //ここでなんだかんだでデータを読み取って動物を特定する 6 7 Animal.Big.Cute.Panda シンシン = new Animal.Big.CUte(); 8 animalList.Add(シンシン); //これやるとエラーとなる 9 //"Animal.Big.Cute.PandaからAnimalへ変換できません"エラーが出る 10 } 11 12 public class Animal 13 { 14 public class Big 15 { 16 public class Cute 17 { 18 public class Panda 19 { 20 } 21 } 22 } 23 }

ですよね?

それなら当り前です。

クラス内のクラス ( 内部クラス? ) では無理です。
どうしても Animal で保持したいなら

C#

1public List<Animal> animals = new List<Animal>(); 2 3public void Test( string data ){ 4 // ここでなんだかんだで... 5 Panda SinSin = new Panda(); 6 // 若しくは 7 // Animal SinSin = new Panda() としてもいい 8 animals.add( SinSin ); 9} 10 11public class Animal{ 12 // フィールドやらメソッドやらがある 13} 14 15public class Panda : Animal{ 16 // フィールドやらメソッドやらがある 17}

のように「継承」によって行います。これでいわゆるポリモーフィズムとやらができる。

デザインパターンのFactoryパターン辺りをチェックしてください。

投稿2018/08/04 09:25

編集2018/08/04 10:24
BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gamu

2018/08/04 09:56

どうもすいません。簡略化しすぎました。編集します。
gamu

2018/08/04 13:03

なるほど ポリモーフィズムはこういう時に使えるのですね。 練習させていただきます。 拙い質問にお答えいただいてありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問