Добавление расширения для класса-сущности

This commit is contained in:
sheymuh 2024-04-20 08:44:17 +04:00
parent 7eb2259885
commit 1628457ece
3 changed files with 113 additions and 0 deletions

View File

@ -0,0 +1,58 @@
using ProjectAircraftCarrier_.Drawnings;
using ProjectAircraftCarrier_.Entities;
namespace ProjectAircraftwarshiprier_.Drawnings;
/// <summary>
/// Расширение для класса EntityWarship
/// </summary>
public static class ExtentionDrawningWarship
{
/// <summary>
/// Разделитель для записи информации по объекту в файл
/// </summary>
private static readonly string _separatorForObject = ":";
/// <summary>
/// Создание объекта из строки
/// </summary>
/// <param name="info">Строка с данными для создания объекта</param>
/// <returns>Объект</returns>
public static DrawningWarship? CreateDrawningWarship(this string info)
{
string[] strs = info.Split(_separatorForObject);
EntityWarship? warship = EntityAircraftCarrier.CreateEntityAircraftCarrier(strs);
if (warship != null)
{
return new DrawningAircraftCarrier(warship.Speed, warship.Weight, warship.BodyColor,
(warship as EntityAircraftCarrier).AdditionalColor, (warship as EntityAircraftCarrier).DeckForAircraftTakeOff,
(warship as EntityAircraftCarrier).ControlCabin, (warship as EntityAircraftCarrier).FighterJet);
}
warship = EntityWarship.CreateEntityWarship(strs);
if (warship != null)
{
return new DrawningWarship(warship.Speed, warship.Weight, warship.BodyColor);
}
return null;
}
/// <summary>
/// Получение данных для сохранения в файл
/// </summary>
/// <param name="drawningWarship">Сохраняемый объект</param>
/// <returns>Строка с данными по объекту</returns>
public static string GetDataForSave(this DrawningWarship drawningWarship)
{
string[]? array = drawningWarship?.EntityWarship?.GetStringRepresentation();
if (array == null)
{
return string.Empty;
}
return string.Join(_separatorForObject, array);
}
}

View File

@ -51,4 +51,35 @@ public class EntityAircraftCarrier : EntityWarship
{ {
AdditionalColor = newColor; AdditionalColor = newColor;
} }
public override string[] GetStringRepresentation()
{
return new[]
{
nameof(EntityAircraftCarrier),
Speed.ToString(),
Weight.ToString(),
BodyColor.Name,
AdditionalColor.Name,
DeckForAircraftTakeOff.ToString(),
ControlCabin.ToString(),
FighterJet.ToString()
};
}
/// <summary>
/// Создание объекта из массива строк
/// </summary>
/// <param name="strs"></param>
/// <returns></returns>
public static EntityAircraftCarrier? CreateEntityAircraftCarrier(string[] strs)
{
if (strs.Length != 8 || strs[0] != nameof(EntityAircraftCarrier))
{
return null;
}
return new EntityAircraftCarrier(Convert.ToInt32(strs[1]), Convert.ToDouble(strs[2]), Color.FromName(strs[3]),
Color.FromName(strs[4]), Convert.ToBoolean(strs[5]), Convert.ToBoolean(strs[6]), Convert.ToBoolean(strs[7]));
}
} }

View File

@ -46,4 +46,28 @@ public class EntityWarship
{ {
BodyColor = newColor; BodyColor = newColor;
} }
/// <summary>
/// Получение строк со значениями свойств объекта класса-сущности
/// </summary>
/// <returns></returns>
public virtual string[] GetStringRepresentation()
{
return new[] { nameof(EntityWarship), Speed.ToString(), Weight.ToString(), BodyColor.Name };
}
/// <summary>
/// Создание объекта из массива строк
/// </summary>
/// <param name="strs"></param>
/// <returns></returns>
public static EntityWarship? CreateEntityWarship(string[] strs)
{
if (strs.Length != 4 || strs[0] != nameof(EntityWarship))
{
return null;
}
return new EntityWarship(Convert.ToInt32(strs[1]), Convert.ToDouble(strs[2]), Color.FromName(strs[3]));
}
} }