diff --git a/lab_0/CollectionGenericObject/ICollectionGenericObjects.cs b/lab_0/CollectionGenericObject/ICollectionGenericObjects.cs
index 1c57f2c..6ad2367 100644
--- a/lab_0/CollectionGenericObject/ICollectionGenericObjects.cs
+++ b/lab_0/CollectionGenericObject/ICollectionGenericObjects.cs
@@ -51,7 +51,18 @@ namespace ProjectBus.CollectionGenericObject;
/// Позиция
/// Объект
T? Get(int position);
- }
+
+ ///
+ /// Получение типа коллекции
+ ///
+ CollectionType GetCollectionType { get; }
+
+ ///
+ /// Получение объектов коллекции по одному
+ ///
+ /// Поэлементый вывод элементов коллекции
+ IEnumerable GetItems();
+}
diff --git a/lab_0/CollectionGenericObject/ListGenericObjects.cs b/lab_0/CollectionGenericObject/ListGenericObjects.cs
index 2fbfbdb..4070bcc 100644
--- a/lab_0/CollectionGenericObject/ListGenericObjects.cs
+++ b/lab_0/CollectionGenericObject/ListGenericObjects.cs
@@ -23,6 +23,8 @@ public class ListGenericObjects : ICollectionGenericObjects
public int SetMaxCount { set { if (value > 0) { _maxCount = value; } } }
+ public CollectionType GetCollectionType => CollectionType.List;
+
///
/// Конструктор
///
@@ -70,5 +72,13 @@ public class ListGenericObjects : ICollectionGenericObjects
_collection.RemoveAt(position);
return temp;
}
+
+ public IEnumerable GetItems()
+ {
+ for (int i = 0; i < Count; ++i)
+ {
+ yield return _collection[i];
+ }
+ }
}
diff --git a/lab_0/CollectionGenericObject/MassiveGenericObjects.cs b/lab_0/CollectionGenericObject/MassiveGenericObjects.cs
index 9b4ee88..d352b26 100644
--- a/lab_0/CollectionGenericObject/MassiveGenericObjects.cs
+++ b/lab_0/CollectionGenericObject/MassiveGenericObjects.cs
@@ -39,10 +39,12 @@ namespace ProjectBus.CollectionGenericObject;
}
}
- ///
- /// Конструктор
- ///
- public MassiveGenericObjects()
+ public CollectionType GetCollectionType => CollectionType.Massive;
+
+ ///
+ /// Конструктор
+ ///
+ public MassiveGenericObjects()
{
_collection = Array.Empty();
}
@@ -132,5 +134,13 @@ namespace ProjectBus.CollectionGenericObject;
_collection[position] = null;
return temp;
}
- }
+
+ public IEnumerable GetItems()
+ {
+ for (int i = 0; i < _collection.Length; ++i)
+ {
+ yield return _collection[i];
+ }
+ }
+}
diff --git a/lab_0/Drawnings/DrawningBus.cs b/lab_0/Drawnings/DrawningBus.cs
index be191ba..3a4a07f 100644
--- a/lab_0/Drawnings/DrawningBus.cs
+++ b/lab_0/Drawnings/DrawningBus.cs
@@ -22,6 +22,14 @@ public class DrawningBus : DrawningSimpleBus
EntitySimpleBus = new EntityBus(speed, weight, bodyColor, additionalColor, additionalCompartment, accordion);
}
+ public DrawningBus(EntitySimpleBus simpleBus) : base(310, 52)
+ {
+ if (simpleBus != null && simpleBus is EntityBus bus)
+ {
+ EntitySimpleBus = new EntityBus(bus.Speed, bus.Weight, bus.BodyColor, bus.AdditionalColor, bus.AdditionalCompartment, bus.Accordion);
+ }
+ }
+
public override void DrawTransport(Graphics g)
{
if (EntitySimpleBus == null || EntitySimpleBus is not EntityBus bus || !_startPosX.HasValue || !_startPosY.HasValue)
diff --git a/lab_0/Drawnings/DrawningSimpleBus.cs b/lab_0/Drawnings/DrawningSimpleBus.cs
index 873435a..2819396 100644
--- a/lab_0/Drawnings/DrawningSimpleBus.cs
+++ b/lab_0/Drawnings/DrawningSimpleBus.cs
@@ -80,6 +80,18 @@ public class DrawningSimpleBus
EntitySimpleBus = new EntitySimpleBus(speed, weight, bodyColor);
}
+ ///
+ /// Конструктор
+ ///
+ /// Класс-сущность
+ public DrawningSimpleBus(EntitySimpleBus simpleBus) : this()
+ {
+ if (simpleBus != null)
+ {
+ EntitySimpleBus = new EntitySimpleBus(simpleBus.Speed, simpleBus.Weight, simpleBus.BodyColor);
+ }
+ }
+
///
/// Конструктор для наследников
///
diff --git a/lab_0/Drawnings/ExtentionDrawningSimpleBus.cs b/lab_0/Drawnings/ExtentionDrawningSimpleBus.cs
new file mode 100644
index 0000000..94e4f33
--- /dev/null
+++ b/lab_0/Drawnings/ExtentionDrawningSimpleBus.cs
@@ -0,0 +1,56 @@
+using System;
+using ProjectBus.Entities;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ProjectBus.Drawnings;
+
+public static class ExtentionDrawningSimpleBus
+{
+ ///
+ /// Разделитель для записи информации по объекту в файл
+ ///
+ private static readonly string _separatorForObject = ":";
+
+ ///
+ /// Создание объекта из строки
+ ///
+ /// Строка с данными для создания объекта
+ /// Объект
+ public static DrawningSimpleBus? CreateDrawningSimpleBus(this string info)
+ {
+ string[] strs = info.Split(_separatorForObject);
+ EntitySimpleBus? simpleBus = EntityBus.CreateEntityBus(strs);
+ if (simpleBus != null)
+ {
+ return new DrawningBus((EntityBus)simpleBus);
+ }
+
+ simpleBus = EntitySimpleBus.CreateEntitySimpleBus(strs);
+ if (simpleBus != null)
+ {
+ return new DrawningSimpleBus(simpleBus);
+ }
+
+ return null;
+ }
+
+ ///
+ /// Получение данных для сохранения в файл
+ ///
+ /// Сохраняемый объект
+ /// Строка с данными по объекту
+ public static string GetDataForSave(this DrawningSimpleBus drawningSimpleBus)
+ {
+ string[]? array = drawningSimpleBus?.EntitySimpleBus?.GetStringRepresentation();
+
+ if (array == null)
+ {
+ return string.Empty;
+ }
+
+ return string.Join(_separatorForObject, array);
+ }
+}
diff --git a/lab_0/Entities/EntityBus.cs b/lab_0/Entities/EntityBus.cs
index 24db7c8..820fa7f 100644
--- a/lab_0/Entities/EntityBus.cs
+++ b/lab_0/Entities/EntityBus.cs
@@ -40,4 +40,32 @@ public class EntityBus : EntitySimpleBus
AdditionalCompartment = additionalCompartment;
Accordion = accordion;
}
-}
\ No newline at end of file
+ ///
+ /// Получение строк со значениями свойств объекта класса-сущности
+ ///
+ ///
+ public override string[] GetStringRepresentation()
+ {
+ return new[]
+ {
+ nameof(EntityBus), Speed.ToString(),
+ Weight.ToString(), BodyColor.Name, AdditionalColor.Name, AdditionalCompartment.ToString(), Accordion.ToString()
+
+ };
+ }
+
+ ///
+ /// Создание объекта из массива строк
+ ///
+ ///
+ ///
+ public static EntitySimpleBus? CreateEntityBus(string[] strs)
+ {
+ if (strs.Length != 7 || strs[0] != nameof(EntityBus))
+ {
+ return null;
+ }
+
+ return new EntityBus(Convert.ToInt32(strs[1]), Convert.ToDouble(strs[2]), Color.FromName(strs[3]), Color.FromName(strs[4]), Convert.ToBoolean(strs[5]), Convert.ToBoolean(strs[5]));
+ }
+}
diff --git a/lab_0/Entities/EntitySimpleBus.cs b/lab_0/Entities/EntitySimpleBus.cs
index 438bad8..5f31438 100644
--- a/lab_0/Entities/EntitySimpleBus.cs
+++ b/lab_0/Entities/EntitySimpleBus.cs
@@ -20,10 +20,6 @@ public class EntitySimpleBus
/// Основной цвет
///
public Color BodyColor { get; private set; }
- public void setBodyColor(Color color)
- {
- BodyColor = color;
- }
///
@@ -43,4 +39,26 @@ public class EntitySimpleBus
Weight = weight;
BodyColor = bodyColor;
}
+
+ //
+ /// Получение строк со значениями свойств объекта класса-сущности
+ ///
+ ///
+ public virtual string[] GetStringRepresentation()
+ {
+ return new[] { nameof(EntitySimpleBus), Speed.ToString(), Weight.ToString(), BodyColor.Name };
+ }
+ ///
+ /// Создание объекта из массива строк
+ ///
+ ///
+ ///
+ public static EntitySimpleBus? CreateEntitySimpleBus(string[] strs)
+ {
+ if (strs.Length != 4 || strs[0] != nameof(EntitySimpleBus))
+ {
+ return null;
+ }
+ return new EntitySimpleBus(Convert.ToInt32(strs[1]), Convert.ToDouble(strs[2]), Color.FromName(strs[3]));
+ }
}