diff --git a/Sailboat/Sailboat/SetGeneric.cs b/Sailboat/Sailboat/SetGeneric.cs
new file mode 100644
index 0000000..b1db75c
--- /dev/null
+++ b/Sailboat/Sailboat/SetGeneric.cs
@@ -0,0 +1,106 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Sailboat.Generics
+{
+ ///
+ /// Параметризованный набор объектов
+ ///
+ ///
+ internal class SetGeneric where T : class
+ {
+ ///
+ /// Массив объектов, которые храним
+ ///
+ private readonly T?[] _places;
+ ///
+ /// Количество объектов в массиве
+ ///
+ public int Count => _places.Length;
+ ///
+ /// Конструктор
+ ///
+ ///
+ public SetGeneric(int count)
+ {
+ _places = new T?[count];
+ }
+ ///
+ /// Добавление объекта в набор
+ ///
+ /// Добавляемая лодка
+ ///
+ public int Insert(T boat)
+ {
+ return Insert(boat, 0);
+ }
+ ///
+ /// Добавление объекта в набор на конкретную позицию
+ ///
+ /// Добавляемая лодка
+ /// Позиция
+ ///
+ public int Insert(T boat, int position)
+ {
+ int nullIndex = -1, i;
+
+ if (position < 0 || position >= Count)
+ {
+ return -1;
+ }
+
+ for (i = position; i < Count; i++)
+ {
+ if (_places[i] == null)
+ {
+ nullIndex = i;
+ break;
+ }
+ }
+
+ if (nullIndex < 0)
+ {
+ return -1;
+ }
+
+ for (i = nullIndex; i > position; i--)
+ {
+ _places[i] = _places[i - 1];
+ }
+
+ _places[position] = boat;
+ return position;
+ }
+ ///
+ /// Удаление объекта из набора с конкретной позиции
+ ///
+ ///
+ ///
+ public bool Remove(int position)
+ {
+ if (position < 0 || position >= Count)
+ {
+ return false;
+ }
+
+ _places[position] = null;
+ return true;
+ }
+ ///
+ /// Получение объекта из набора по позиции
+ ///
+ ///
+ ///
+ public T? Get(int position)
+ {
+ if (position < 0 || position >= Count)
+ {
+ return null;
+ }
+ return _places[position];
+ }
+ }
+}
\ No newline at end of file