Как через основной класс выйти на наследуемые? - 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; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д