> For the complete documentation index, see [llms.txt](https://nas-3.gitbook.io/nasdatabase/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://nas-3.gitbook.io/nasdatabase/vspomogatelnyi-instrumentarii/column.md).

# Column

Класс Column в библиотеке представляет собой столбец данных и является оболочкой над хэш-таблицей. Он наследуется от абстрактного класса [AColumn](/nasdatabase/interfaces/acolumn.md), что делает его адаптивным для различных реализаций столбцов в базе данных. Этот абстрактный класс служит основой для хранения столбцов в базе, и позволяет легко разрабатывать собственные варианты реализации столбцов. Основная цель столбцов - предоставление функционала по поиску, добавлению и замене данных.&#x20;

У этого класса есть несколько фундаментальных понятий, это TypeOfData и Offset. TypeOfData - это тип данных который может хранить в себе столбец. Для смены типы столбца есть специальный метод `ChangType(TypeOfData type)`. Он позволяет изменить тип у столбца. А про Offset будет написано ниже.

Ниже описаны несколько примеров наиболее распространенных методов этого класса.

```csharp
public override bool Push(string data, uint CountBoxes)
{
    bool result = false;
    if (TypeOfData.CanConvert(data))
    {
        boxes.AddElement(new ItemData((int)CountBoxes, data));
        _AddData?.Invoke(new ItemData((int)CountBoxes, data));
        result = true;
    }
    return result;
}
```

Этот тот метод принимает в себя два параметра: data и CountBoxes. Далее в коде происходит проверка того, могут ли введенные данные храниться в этом столбце, если да, происходит добавление данных в столбец, а значит и в HashTable, так как Column это «оболочка» над этим классом.

```csharp
public override string FindDataByID(int id)
{
    try
    {
        return boxes.GetValues()[id - (int)Offset].Data ?? " ";
    }
    catch (IndexOutOfRangeException)
    {
        throw new IndexOutOfRangeException($"Попытка взять элемент по ID: {id}, но данные физически с учетом offset {Offset} не загруженны!");
    }
}
```

В методе происходит попытка взять данные по ID учитывая смещение.&#x20;

{% hint style="info" %}
Смещения данных проявляется в Column в том случае, когда фактически данные в памяти сохраняются с индекса 0 до N, где N - количество объектов в секторе, в то время как в абстракции может быть загружен, например, 5-й кластер. Для предотвращения возможных ошибок использования данных, связанных с этим, Offset служит для перенаправления запросов к данным, физически хранящимся в памяти.
{% endhint %}

В остальном все методы завязаны с хеш-таблицей и для обычного пользователя dll углубленное знание не понадобится.&#x20;
