中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

不忘本~枚舉

返回目錄

嗨!又(you)要(yao)和大家一(yi)起說說不忘本的(de)文章了,其(qi)實(shi)我寫(xie)的(de)不忘本就是指(zhi)定C#的(de)一(yi)些基礎知識,把基礎知識從(cong)書(shu)面上拿出(chu)來,放到實(shi)踐中去(qu)講(jiang)!咱領袖說的(de)好(hao):理論要(yao)聯(lian)系實(shi)際嗎!哈(ha)哈(ha)!

先看一(yi)個最簡單的(de)枚舉enum吧

1    public enum UserBaseColumns
2 
3     {
4 
5         UserName = 1,
6 
7         Age = 2,
8 
9     }

 

我們如(ru)何去使(shi)用它呢(ni),很簡單,如(ru)果我們希望(wang)拿到UserBaseColumns.UserName這個枚舉(ju)元素(su)的值(zhi),可以(yi)這樣(yang)寫(int)UserBaseColumns.UserName,也就(jiu)是(shi)強轉(zhuan)換一下就(jiu)OK了,因為枚舉(ju)和數值(zhi)類型可以(yi)直(zhi)接轉(zhuan)換的,如(ru)果希望(wang)得(de)到UserName這個字(zi)符呢(ni),即(ji)枚舉(ju)元素(su)的名(ming)稱,我們可以(yi)這樣(yang):

Enum.GetName(UserBaseColumns.UserName.GetType(), UserBaseColumns.UserName)

其實為(wei)什么要(yao)使用(yong)(yong)枚(mei)舉(ju)(ju)呢?這(zhe)(zhe)個問題(ti)是(shi)比它(ta)的(de)基礎知識(shi)更重要(yao)的(de),枚(mei)舉(ju)(ju)對(dui)于(yu)程(cheng)序(xu)員來說是(shi)提高了(le)(le)程(cheng)序(xu)的(de)可讀性(xing),對(dui)于(yu)使用(yong)(yong)程(cheng)序(xu)的(de)用(yong)(yong)戶來說,沒有任何意(yi)義;我(wo)們(men)通常(chang)把(ba)一(yi)些具有固(gu)定值的(de)對(dui)象創建為(wei)枚(mei)舉(ju)(ju)對(dui)象,把(ba)一(yi)些經常(chang)發(fa)生變(bian)化的(de)存儲在(zai)數(shu)據表中,這(zhe)(zhe)也是(shi)程(cheng)序(xu)設計(ji)的(de)一(yi)個常(chang)識(shi),例如,一(yi)個用(yong)(yong)戶對(dui)象,它(ta)有一(yi)個狀態(tai)字(zi)段,而這(zhe)(zhe)個字(zi)段只有"正常(chang)","刪除","禁用(yong)(yong)"這(zhe)(zhe)三種值,那我(wo)們(men)為(wei)了(le)(le)使用(yong)(yong)程(cheng)序(xu)員在(zai)給對(dui)象賦值時的(de)可讀性(xing)強,就把(ba)這(zhe)(zhe)個字(zi)段設為(wei)枚(mei)舉(ju)(ju)枚(mei)舉(ju)(ju)類型,看代碼:

 1  public enum Status
 2 
 3     {
 4 
 5         /// <summary>
 6 
 7         /// 正常
 8 
 9         /// </summary>
10 
11         Normal = 100,
12 
13         /// <summary>
14 
15         /// 刪除(chu)
16 
17         /// </summary>
18 
19         Deleted = 400,
20 
21         /// <summary>
22 
23         /// 禁用
24 
25         /// </summary>
26 
27         Blocked = 500,
28 
29     }

 

而用戶對象就變成了

 1      /// <summary>
 2 
 3     /// 用戶(hu)實體
 4 
 5     /// </summary>
 6 
 7     public partial class UserBase : IDataEntity
 8 
 9     {
10 
11         /// <summary>
12 
13         /// 用戶(hu)名
14 
15         /// </summary>
16 
17         public string UserName { get; set; }
18 
19         /// <summary>
20 
21         /// 年(nian)齡(ling)
22 
23         /// </summary>
24 
25         public int Age { get; set; }
26 
27         /// <summary>
28 
29         /// 狀態
30 
31         /// </summary>
32 
33         public Status Status { get; set; }
34 
35     }

 

以上是枚舉(ju)在(zai)程序開發中最基(ji)礎的用法,現在(zai)我再來說說枚舉(ju)的一(yi)些高級用法,枚舉(ju)對象(xiang)支持位運算,即它支持,加(jia),減(jian)運算.

 1  [Flags]
 2 
 3     public enum UserBaseColumns
 4 
 5     {
 6 
 7         UserName = 1,
 8 
 9         Age = 2,
10 
11     }

 

這是加運算

1  UserBaseColumns enums = new UserBaseColumns();
2 
3  enums = UserBaseColumns.UserName | UserBaseColumns.Age;
這是減運算
1 enums = UserBaseColumns.UserName ^ (~UserBaseColumns.Age);
這是查看元素是否在枚舉合的操作
1 if ((enums & UserBaseColumns.UserName) != 0)
2 
3                 Console.WriteLine("包(bao)括名字(zi)字(zi)段(duan)");
4 
5             else
6 
7                 Console.WriteLine("不包括名(ming)字字段");

在(zai)C#4.0中已經集成了判斷元素(su)是否在(zai)集合的方法:HasFlag

當然我們(men)不提倡用4.0中的方法,因為(wei)如(ru)果你的frameworks是(shi)較低的版本時,這(zhe)個(ge)HasFlag就報錯了,

別外,還有(you)一種將枚(mei)舉轉為字符,再去比較它是否存在于集(ji)合的方法(fa),下面我(wo)給(gei)出代碼:

 1      /// <summary>
 2 
 3     /// 自定(ding)義枚(mei)舉(ju)指是(shi)否(fou)在枚(mei)舉(ju)列表中
 4 
 5     /// </summary>
 6 
 7     public class HasEnum
 8 
 9     {
10 
11         private string[] EnumArray = null;
12 
13         public HasEnum(Enum enums)
14 
15         {
16 
17             this.EnumArray = Regex.Split(enums.ToString(), ",");
18 
19             if (this.EnumArray.Length < 1)
20 
21                 throw new Exception("輸入參(can)數異常");
22 
23         }
24 
25         public bool HasEnumFlags(Enum entity)
26 
27         {
28 
29             return EnumArray.Contains(Enum.GetName(entity.GetType(), entity));
30 
31         }
32 
33     }

 

好了,講到這里,大家回去做個(ge)demo,自己實驗一下(xia)吧!如果有疑問,請給我留言!

為了所(suo)有enum對象(xiang)都是繼(ji)承為Enum這(zhe)(zhe)個抽(chou)象(xiang)類的.它是所(suo)有枚舉對象(xiang)的基類,所(suo)以在程序中(zhong)我們經(jing)常這(zhe)(zhe)樣寫

      
 1  /// <summary>
 2 
 3         /// 更(geng)新指定字段
 4 
 5         /// </summary>
 6 
 7         /// <param name="entity"></param>
 8 
 9         /// <param name="enums"></param>
10 
11         void Update(IDataEntity entity, Enum enums);

 

上面的編程風格叫做面向接口編程,也叫面向超類編程!在這個例子中Enum就是微軟給我們定義的超類
我們定義的所有枚舉很派生自它.
返回目錄
posted @ 2011-06-30 15:37  張占嶺  閱讀(760)  評論(6)    收藏  舉報