Изображение для статьи создано при помощи нейросети Kandinsky
Доброго времени суток, друзья.
В этой статье я хотел бы рассмотреть вариант класса для C#, который я назвал AinByteValue. Смысл данного класса - предоставить доступ разработчику C# до конкретных битов внутри значения типа byte и дать возможность управлять этими битами при помощи открытых методов/свойств, которые будет предоставлять класс, а также быстро получать значение конкретного бита в заданной позиции. Признаюсь, меня давно интересовала тема того, каким образом можно оперировать отдельно взятыми битами внутри одного байта и использовать эти отдельно взятые биты в качестве "флажков", которые могли бы быть аналогом типа данных bool, но занимать меньше памяти программы.
Возникает закономерный вопрос: а для чего и где этот класс может понадобиться в принципе при разработке программ на C#? Зачем нам вообще управлять битами внутри байта? Ведь в языке C# и так есть уже множество стандартных типов данных, таких как bool, byte, int и т. д.
Но давайте представим ситуацию, что мы пишем некоторую программу и проектируем в ней класс, где нам требуется хранить определённое количество "флажков" булева типа (bool). Каждый из таких флажков несёт за собой какую-то функциональность класса и связанную с ней логику. Например, класс мог бы выглядеть так:
public class TestClassWithBooleans {
private bool myFlag1;
private bool myFlag2;
private bool myFlag3;
private bool myFlag4;
private bool myFlag5;
private bool myFlag6;
private bool myFlag7;
private bool myFlag8;
public TestClassWithBooleans() {
// здесь какой-то код конструктора
}
// здесь какие-то методы класса, использующие фнутренние флаги myFlag1, ..., myFlag8
}
Здесь для простоты названия всех флажков я придумал "из головы", и они тривиальны: все с префиксом 'myFlag' и индексом от 1 до 8 в конце каждого имени поля класса. В реальной же программе, где потребуется множество переменных типа bool внутри класса, конечно, им были бы даны какие-то более читаемые и осмысленные имена, и была бы реализована соответствующая логика для работы с каждым из флажков.
Добавить комментарий