Как через основной класс выйти на наследуемые? - C#
Формулировка задачи:
Есть класс
charect
У него есть 3 наследуемых классаZ
ombie,H
uman,G
host Дан текстовой файл с набором буквZ H I
в котором нужно определить в List<> только класс зомби и призрака. Сам текстовый фай я уже разобрал поchar[]
. Теперь осталось методом перебора понять что такое призрак, а что такое зомби и естественно человек. Код должен остаться пластичным, если будет добавлен новый персонаж, то код и его сможет отделить. Как я понял можно работать через charect, но я никак не могу додумать алгоритм перебора классов наследников.
Так же, каждый из "персонажей" имеет переменную char по которой его и можно в тексте отличить от других.
Решение задачи: «Как через основной класс выйти на наследуемые?»
textual
Листинг программы
- using System;
- using System.Collections.Generic;
- namespace Cyberforum
- {
- class Program
- {
- static void Main(string[] args)
- {
- string input = "HZZHHHGZG";
- List<Character> characters = new List<Character>();
- foreach (char c in input)
- {
- if (Character.ValidKey(c))
- {
- Character newCharacter = Character.Instantiate(c);
- characters.Add(newCharacter);
- }
- }
- Console.WriteLine(String.Join("\n", characters));
- }
- }
- abstract class Character
- {
- protected string Name;
- protected int Health;
- public abstract bool HasBrains();
- #region Static members
- public static Character Instantiate(char key)
- {
- var T = _map[key];
- return (Character)Activator.CreateInstance(T);
- }
- public static bool ValidKey(char key) { return _map.ContainsKey(key); }
- private static Dictionary<char, Type> _map = new Dictionary<char, Type>()
- {
- { 'G', typeof(Ghost) },
- { 'Z', typeof(Zombie) },
- };
- #endregion Static members
- }
- class Zombie : Character
- {
- public override bool HasBrains() { return false; }
- public Zombie()
- {
- Name = "Rob";
- Health = 40;
- }
- private new static Character Instantiate(char key) { throw new NotImplementedException(); }
- }
- class Human : Character
- {
- public override bool HasBrains() { return true; }
- public Human()
- {
- Name = "John";
- Health = 100;
- }
- }
- class Ghost : Character
- {
- public override bool HasBrains() { return false; }
- public Ghost()
- {
- Name = "Casper";
- Health = 0;
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д