Как через основной класс выйти на наследуемые? - 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;
        }
    }
}

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


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

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

6   голосов , оценка 4 из 5
Похожие ответы