Массив из разных объектов (квадраты, линии, окружности) - 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");
}
}
}