Как через основной класс выйти на наследуемые? - C#

Узнай цену своей работы

Формулировка задачи:

Есть класс

charect

У него есть 3 наследуемых класса

Z

ombie,

H

uman,

G

host

Дан текстовой файл с набором букв

Z H I

в котором нужно определить в List<> только класс зомби и призрака. Сам текстовый фай я уже разобрал по

char[]

. Теперь осталось методом перебора понять что такое призрак, а что такое зомби и естественно человек. Код должен остаться пластичным, если будет добавлен новый персонаж, то код и его сможет отделить. Как я понял можно работать через charect, но я никак не могу додумать алгоритм перебора классов наследников.
Так же, каждый из "персонажей" имеет переменную char по которой его и можно в тексте отличить от других.

Решение задачи: «Как через основной класс выйти на наследуемые?»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace Cyberforum
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             string input = "HZZHHHGZG";
  11.  
  12.             List<Character> characters = new List<Character>();
  13.             foreach (char c in input)
  14.             {
  15.                 if (Character.ValidKey(c))
  16.                 {
  17.                     Character newCharacter = Character.Instantiate(c);
  18.                     characters.Add(newCharacter);
  19.                 }
  20.             }
  21.            
  22.             Console.WriteLine(String.Join("\n", characters));
  23.         }
  24.     }
  25.  
  26.     abstract class Character
  27.     {
  28.         protected string Name;
  29.         protected int Health;
  30.  
  31.         public abstract bool HasBrains();
  32.  
  33.         #region Static members
  34.         public static Character Instantiate(char key)
  35.         {
  36.             var T = _map[key];
  37.             return (Character)Activator.CreateInstance(T);
  38.         }
  39.  
  40.         public static bool ValidKey(char key) { return _map.ContainsKey(key); }
  41.  
  42.         private static Dictionary<char, Type> _map = new Dictionary<char, Type>()
  43.         {
  44.             { 'G', typeof(Ghost) },
  45.             { 'Z', typeof(Zombie) },
  46.         };
  47.         #endregion Static members
  48.     }
  49.  
  50.     class Zombie : Character
  51.     {
  52.         public override bool HasBrains() { return false; }
  53.  
  54.         public Zombie()
  55.         {
  56.             Name = "Rob";
  57.             Health = 40;
  58.         }
  59.  
  60.         private new static Character Instantiate(char key) { throw new NotImplementedException(); }
  61.     }
  62.  
  63.     class Human : Character
  64.     {
  65.         public override bool HasBrains() { return true; }
  66.  
  67.         public Human()
  68.         {
  69.             Name = "John";
  70.             Health = 100;
  71.         }
  72.     }
  73.  
  74.     class Ghost : Character
  75.     {
  76.         public override bool HasBrains() { return false; }
  77.  
  78.         public Ghost()
  79.         {
  80.             Name = "Casper";
  81.             Health = 0;
  82.         }
  83.     }
  84. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы