Массив из разных объектов (квадраты, линии, окружности) - C#

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

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

Привет, ребят. Есть массив из разных объектов(квадраты, линии, окружности) вразнобой. Каждый объект - разный класс. И для каждого класса есть своя функция рисования. Создал я общую функцию для рисования, создал в ней switch:
        
private void Draw(Shape shape)
        {
            switch(shape.GetType().ToString())
            {
                case "ООП.Box": Draw((Box)shape); break;
                case "ООП.Circle": Draw((Circle)shape); break;
                case "ООП.Line": Draw((Line)shape); break;
                case "ООП.ColorBox": Draw((ColorBox)shape); break;
                case "ООП.ColorCircle": Draw((ColorCircle)shape); break;
                case "ООП.ColorLine": Draw((ColorLine)shape); break;
            }
        }
Ии... Все работает! Но, чувствуется мне, что это все можно сделать одной строкой, что-то наподобие:
Draw((shape.GetType()) shape);
То есть как можно узнать тип объекта который находится в переданной ячейке массива и сразу же эту ячейку к нему привести? Всем спасибо!
Добавил: Хочется увидеть решения не больше одной строки! Можно допилить классы, чтобы в Draw(Shape shape) была одна строчка. Но это не то, что я хочу увидеть.

Решение задачи: «Массив из разных объектов (квадраты, линии, окружности)»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication2 {
    class Program {
        static void Main(string[] args) {
            List<IDrawable > figures = new List<IDrawable> {
                new Line(),
                new Triangle(),
                new Circle(),
                new Line()
            };
            foreach (var item in figures) {
                item.Draw();
            }
            Console.ReadLine();
        }
    }
    interface IDrawable {
        void Draw();
    }
    class Triangle : IDrawable  {
        public void Draw() {
            //Тут реализация...
            Console.WriteLine("Triangle");
        }
    }
    class Circle : IDrawable {
        public void Draw() {
            //Тут реализация...
            Console.WriteLine("Circle");
        }
    }
    class Line : IDrawable {
        public void Draw() {
            //Тут реализация...
            Console.WriteLine("Line");
        }
    }
}

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


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

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

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