当前位置:  编程技术>.net/c#/asp.net

C#枚举中的位运算权限分配浅谈

    来源: 互联网  发布时间:2014-10-19

    本文导语:  常用的位运算主要有与(&), 或(|)和非(~), 比如: 1 & 0 = 0, 1 | 0 = 1, ~1 = 0 在设计权限时, 我们可以把权限管理操作转换为C#位运算来处理. 第一步, 先建立一个枚举表示所有的权限管理操作: 代码如下:[Flags] public enum Permissions { Insert = 1,...

常用的位运算主要有与(&), 或(|)和非(~), 比如:

1 & 0 = 0, 1 | 0 = 1, ~1 = 0

在设计权限时, 我们可以把权限管理操作转换为C#位运算来处理.

第一步, 先建立一个枚举表示所有的权限管理操作:

代码如下:

[Flags]
public enum Permissions
{
Insert = 1,
Delete = 2,
Update = 4,
Query = 8
}

[Flags]表示该枚举可以支持C#位运算, 而枚举的每一项值, 我们用2的n次方来赋值, 这样表示成二进制时刚好是1 = 0001, 2 = 0010, 4 = 0100, 8 = 1000等, 每一位表示一种权限, 1表示有该权限, 0表示没有.

接下来是权限的运算:

1. 权限的加法, 使用与运算来实现. 我们知道, 0001 | 0100 = 0101, 这样就表示同时具有第一位和第三位的权限管理了, 枚举表示为:

Permissions per = Permissions.Insert | Permissions.Update

2. 权限的减法, 使用与运算+非运算来实现, 如上面要去掉Insert权限, 操作为:

Permissions per &= ~Permissions.Insert即是 0101 & ~0001 = 0101 & 1110 = 0100

3. 权限的判断, 使用与运算, 当判断用一用户是否具有该操作权限时, 要把用户的的权限与操作权限进行与运算, 如果得到的结果仍是操作权限管理, 则表示用户具有该权限:

代码如下:

 Permissions per = Permissions.Insert | Permissions.Update;
  if(per & PermissionsPermissions.Insert = Permissions.Insert)
  {
  //有操作权限
  }

比较过程为 0101 & 0001 = 0001, 0001的0位用与C#位运算把其它位都置成0, 变成只比较1的这一位.

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.sql枚举clientinfostatus的类成员方法: valueof定义及介绍
  • corba枚举类型参数传递问题?(大笨鸟问题) iis7站长之家
  • java命名空间java.math枚举roundingmode的类成员方法: valueof定义及介绍
  • 枚举和宏的区别详细解析
  • java命名空间javax.swing枚举dropmode的类成员方法: valueof定义及介绍
  • 枚举类型变量如何定义与初始化,如何给该变量加入新值?
  • java命名空间javax.swing枚举sortorder的类成员方法: valueof定义及介绍
  • 关于Ubuntu枚举usb设备的问题?
  • java命名空间java.sql枚举rowidlifetime的类成员方法: valueof定义及介绍
  • Linux下怎么枚举usb设备?
  • java命名空间javax.tools枚举standardlocation的类成员方法: valueof定义及介绍
  • corba枚举类型参数传递问题?(大笨鸟问题)
  • java命名空间javax.xml.ws枚举service.mode成员方法: valueof定义参考
  • java中没有枚举变量,类似的功能如何简单实现?
  • java命名空间java.lang.management枚举memorytype的类成员方法: valueof定义及介绍
  • JAVA 为什么没有枚举类型???
  • java命名空间java.lang.annotation枚举elementtype的类成员方法: valueof定义及介绍
  • 如何进行输入法枚举
  • java命名空间javax.lang.model枚举sourceversion的类成员方法: valueof定义及介绍
  • 枚举类型定义重复疑问?
  • java命名空间java.lang.annotation枚举retentionpolicy的类成员方法: valueof定义及介绍
  • java枚举的使用示例


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3