马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
今天去面试,被问到C#中的new关键字,看了那么多的书对new关键字还是有一定认识,回来又把new复习了一遍,发现了许多以前还不知道的细节。技能|计划Enum的运算一般触及到位运算(AND、OR、XOR),按位运算,常利用FlagsAttribute自界说属性界说。FlagsAttribute和Enum的原则:
只要要对数值实行按位运算(AND、OR、XOR)时才对列举利用FlagsAttribute自界说属性。
用2的幂(即1、2、4、8等)界说列举常量。这意味着组合的列举常量中的各个标记都不堆叠。
请思索为经常使用标记组合创立一个列举常量。比方,假如用于文件I/O操纵的列举包括列举常量Read=1和Write=2,请思索创立列举常量ReadWrite=ReadORWrite,该常量组合了Read和Write标记。别的,在某些情形下,大概会将用于组合标记的按位OR运算视为一种初级观点,在复杂义务中不必要实行此操纵。
将正数界说为标记列举常量时应审慎,由于良多标记地位都大概设置为1,这大概使您的代码发生搅浑并易于产生代码毛病。
测试数值中是不是已设置标记的一种烦琐办法为:在数值和标记列举常量之间实行按位“与”操纵,这类办法会将数值中与标记不合错误应的一切位都设置为零,然后测试该操纵的了局是不是即是该标记列举常量。
将None用作值为零的标记列举常量的称号。在按位AND运算中,不克不及利用None列举常量测试标记,由于所得的了局一直为零。可是,您能够在数值与None列举常量之间实行逻辑(不是按位)对照,以断定数值中是不是已设置任何位。
假如创立的是值列举而不是标记列举,创立None列举常量仍非常有效。缘故原由是在默许情形下,大众言语运转库会将用于列举的内存初始化为零。因而,假如不界说值为零的常量,则列举在创立时将包括不法值。
假如分明存在使用程序必要暗示的默许情形,请思索利用值为零的列举常量暗示默许值。假如不存在默许情形,请思索利用值为零的列举常量(这意味着该情形不由任何其他列举常量暗示)。
不要仅为了反应列举本身的形态而界说列举值。比方,不要界说仅用于标志列举开端的列举常量。假如必要断定列举的最初一个值,请显式反省该值。别的,假如列举常量局限中的一切值都无效,还能够对第一个和最初一个列举常量实行局限反省。
不要指定保存供未来利用的列举常量。
在界说接纳列举常量作为值的办法或属性时,招考虑对该值举行考证。缘故原由是即便没有在列举中界说某个数值,也能够将该数值强迫转换为列举范例。
技能1:怎样往除一个列举项:
比方界说了权限EnumPermission:
[Flags]
publicenumPermission{
Select=1,
Edit=2,
Delete=4,
View=8,
All=Select|Edit|Delete|View
}
能够接纳这个函数举行盘算:
publicstaticPermissionClearFlag(Permissionvalue,Permissionflag)
{
value=value&(Permission.All^flag);
returnvalue;
}
你觉得学习.NET怎么样,我懂的少,问的可能很幼稚,见笑了啊:) |