C++中的位域成员有2种用途。一种是存放位标志的,比如下面这种。
struct flags
{
unsigned int flag1:1;
unsigned int flag2:1;
}
C#中可以很方便地用 [Flags] Enum 实现,网上找C#实现位域的都是这种。
还有一种是存放数值的,比如今天碰到一个问答,是下面这样的结构。
struct MWORD
{
unsigned int m_nBase:30;
unsigned int m_nMul:2;
}
原先C++中Mul成员的取值范围是0..3。
假如还用 [Flags] Enum 实现,按位与操作后取值是零散的{0,0x40000000,0x80000000,0xC0000000},用起来不方便。
需要把原先C++自动实现的各种位操作封装到属性中:
//C#的控制台工程
using System;
using System.Runtime.InteropServices;
namespace ConsoleApplication1
{
[StructLayout(LayoutKind.Sequential)]
public struct MWORD
{
public uint value; //暴露出来方便调试,最终版应该是private的。
public uint Base
{