[StructLayout(LayoutKind.Explicit)]
public struct SomeStruct
{
[FieldOffset(0)]
public byte v1;
[FieldOffset(1)]
public byte v2;
[FieldOffset(2)]
public float v3;
......
}
Допустим некоторые поля типа byte имеют битовые флаги нескольких переменных.(т.е. например v1 содержит 8 переменных).
На помощь создается класс SomeStructHelper
class SomeStructHelper
{
public static SomeStruct StructData
{
get
{
SomeStruct returnStruct;
BitArray bit = new BitArray(new bool[] { Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7, Bit8 });
Array array = Array.CreateInstance(typeof(byte), 1);
bit.CopyTo(array, 0);
returnStruct.v1 = (byte)array.GetValue(0);
..............
}
set
{
BitArray bits = new BitArray(new byte[] { value.v1});
Bit1 = bits.Get(0);
Bit2 = bits.Get(1);
...........
}
}
public static bool Bit1 { get; set; }
public static bool Bit2 { get; set; }
public static bool Bit3 { get; set; }
.....................
}
Вот вопрос: StructData лучше оставить свойством или желательно сделать два статических метода(Get и Set)?
Здравствуйте, Аноним, Вы писали:
А>Есть некоторая структура для передачи данных
А>
А> [StructLayout(LayoutKind.Explicit)]
А> public struct SomeStruct
А> {
А> [FieldOffset(0)]
А> public byte v1;
А> [FieldOffset(1)]
А> public byte v2;
А> [FieldOffset(2)]
А> public float v3;
А> ......
А> }
А>
А>Допустим некоторые поля типа byte имеют битовые флаги нескольких переменных.(т.е. например v1 содержит 8 переменных).
А>На помощь создается класс SomeStructHelper
А>
Здравствуйте, Аноним, Вы писали:
А>Вот вопрос: StructData лучше оставить свойством или желательно сделать два статических метода(Get и Set)?
А зачем в данном случае для работы с битами использовать BitArray? Почему бы не сделать enum с флагами?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Функция или свойство?
От:
Аноним
Дата:
22.03.11 14:38
Оценка:
Здравствуйте, Codechanger, Вы писали:
C>Здравствуйте, Аноним, Вы писали:
А>>Вот вопрос: StructData лучше оставить свойством или желательно сделать два статических метода(Get и Set)?
C>В данном случае лучше методы. При использовании свойств могут возникнуть некоторые, скажем так, иллюзии.
Спасибо! Так и сделаю!
Re[2]: Функция или свойство?
От:
Аноним
Дата:
22.03.11 14:47
Оценка:
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, Аноним, Вы писали:
H>А зачем в данном случае для работы с битами использовать BitArray? Почему бы не сделать enum с флагами?
Допустим у нас есть панель с тумблерами(состояние вкл. или выкл.) Тогда проще хранить в дном байте 8 тумблеров. Думаю в этом случае enum с флагами все усложнит. Ведь мы же должны на стороне графики считывать структуру и отображать состояния тумблеров, а на стороне логики записывать....
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, hardcase, Вы писали:
H>>Здравствуйте, Аноним, Вы писали:
H>>А зачем в данном случае для работы с битами использовать BitArray? Почему бы не сделать enum с флагами?
А>Допустим у нас есть панель с тумблерами(состояние вкл. или выкл.) Тогда проще хранить в дном байте 8 тумблеров. Думаю в этом случае enum с флагами все усложнит. Ведь мы же должны на стороне графики считывать структуру и отображать состояния тумблеров, а на стороне логики записывать....
Здравствуйте, _nn_, Вы писали:
А>>Допустим у нас есть панель с тумблерами(состояние вкл. или выкл.) Тогда проще хранить в дном байте 8 тумблеров. Думаю в этом случае enum с флагами все усложнит. Ведь мы же должны на стороне графики считывать структуру и отображать состояния тумблеров, а на стороне логики записывать....
__>Вы наверное не поняли. __>Вам рекоммендуют System.FlagsAttribute.
Не очень понял чем этот вариант удобнее для чтения и записи данных(на стороне графики и логике). Могли бы вы предложить реализацию enum для переменной типа byte в которой находятся 8 тумблеров?
PS: c FlagsAttribute я знаком
Re[5]: Функция или свойство?
От:
Аноним
Дата:
22.03.11 15:40
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, _nn_, Вы писали:
А>>>Допустим у нас есть панель с тумблерами(состояние вкл. или выкл.) Тогда проще хранить в дном байте 8 тумблеров. Думаю в этом случае enum с флагами все усложнит. Ведь мы же должны на стороне графики считывать структуру и отображать состояния тумблеров, а на стороне логики записывать....
__>>Вы наверное не поняли. __>>Вам рекоммендуют System.FlagsAttribute.
А>Не очень понял чем этот вариант удобнее для чтения и записи данных(на стороне графики и логике). Могли бы вы предложить реализацию enum для переменной типа byte в которой находятся 8 тумблеров? А>PS: c FlagsAttribute я знаком