Есть две вещи, на которые стоит посмотреть; оператор неявного преобразования (в S2kBool
) в bool
или сами операторы true
/ false
...
операторы true / false (заметьте, я предпочитаю неявное преобразование bool самостоятельно):
public static bool operator true(S2kBool x) {
return x.Value;
}
public static bool operator false(S2kBool x) {
return !x.Value;
}
тогда вы можете использовать if(tObj.IsActive)
оператор преобразования:
public static implicit operator bool(S2kBool x) {
return x.Value;
}
работает аналогично
Вы также можете добавить преобразование в другом направлении:
public static implicit operator S2kBool(bool x)
{
return new S2kBool(x);
}
Затем вы можете назначить IsActive = false;
и т. Д.
Наконец, мне интересно, должна ли это быть неизменная структура? Это может сбить с толку, если вы ожидаете, что это будет вести себя как значение. Например, посмотрите на последнюю строку здесь:
TestObject obj1 = new TestObject(),
obj2 = new TestObject();
obj1.IsActive = obj2.IsActive = S2kBool.True;
Console.WriteLine(obj1.IsActive);
Console.WriteLine(obj2.IsActive);
obj1.IsActive.Value = false;
Console.WriteLine(obj1.IsActive);
Console.WriteLine(obj2.IsActive); // what does this print?
Это печатает false, потому что оба поля IsActive
указывают на один и тот же экземпляр из S2kBool
. Если это было намерение, тогда хорошо. Но если бы это был я, я бы сделал его неизменным (класс или структура). Но так как у него нет состояния, отличного от bool, я бы сказал, что это хорошо подходит как структура.
Если честно, я не полностью уверен, зачем это нужно вообще , когда вся функциональность может быть реализована статическими методами / и т.д.