<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      不可不知的C#基礎 1. -- Extension 擴展方法

      背景

      前幾天有同事問到我一個簡單的功能, 就是當你使用枚舉時如何給每個一元素增加描述字符串并且可以很容易的讀取出來.

       

      比如有一個枚舉類型是列出對一個問題給出的選項(例如: 同意?不同意?中立?):

      public enum AssessmentAnswer
      {
      Strongly_Disagree = 1,
      Disagree = 2,
      Neutral = 3,
      Agree = 4,
      Strongly_Agree = 5
      }

      當選擇不同的答案時, 希望得到一些描述性的語句比方說:
      1. "強烈的反對"
      2. "反對"
      3. "持中立觀點"
      4. "同意"
      5. "完全的同意"
       
      當然你可以建立一個數據庫表格,存放這些信息, 但是我想起幾年前,我在網上下載一個 EnumDescription 源碼(忘記了是在哪里下載的), 就可以實現這一功能.
      讓我們一起來看看是怎么樣用 Extension 做到的:
       

      實現

      首先定義一個EnumDescription 類:
       
       
      public class EnumDescription : Attribute
      {
      public string Text
      {
      get { return _text; }
      } private string _text;

      public EnumDescription(string text)
      {
      _text = text;
      }
      }

      注意它的父類是Attribute, 因為我們希望將描述的語句作為每一個對應元素的特性. 然后新建一個文件,命名EnumExtensions.cs

      public static class EnumExtensions
      {
      public static string ToDescription(this Enum enumeration)
      {
      Type type = enumeration.GetType();
      MemberInfo[] memInfo = type.GetMember(enumeration.ToString());

      if (null != memInfo && memInfo.Length > 0)
      {
      object[] attrs = memInfo[0].GetCustomAttributes(typeof(EnumDescription), false);
      if (null != attrs && attrs.Length > 0)
      return ((EnumDescription)attrs[0]).Text;
      }

      return enumeration.ToString();
      }
      }

       

      在這里我們定義了一個擴展函數ToDescription, 就像所有的擴展函數一樣,它的參數是類似(this …),

      這個函數首先用GetType 得到了當前枚舉的類型, 然后借助 GetMember按照元素的名字(值), 得到這個特定的元素, 最后用GetCustomAttributes 得到描述的內容.

       

      這個擴展函數實現后,我們可以修改枚舉的定義,加入描述:

       

      public enum AssessmentAnswer
      {
      [EnumDescription("強烈的反對")]
      Strongly_Disagree = 1,

          [EnumDescription("反對")]
      Disagree = 2,
      Neutral = 3,
      Agree = 4,
      [EnumDescription("完全的同意")]
      Strongly_Agree = 5
      }

       

      當要獲取描述語句時, 你可以輕松的調用ToDescription :

       

      //返回 "強烈的反對"

      AssessmentAnswer.Strongly_Disagree.ToDescription()

       

      注意, 如果沒有給元素加入特性, 你仍舊可以使用ToDescription, 可以參考上面的代碼看看是為什么.

      //返回 “Disagree”

      AssessmentAnswer.Disagree.ToDescription()

       

      總結

      擴展方法作為特殊的靜態方法使您能夠向現有類型“添加”方法,而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。

      對于用 C# 和 Visual Basic 編寫的客戶端代碼,調用擴展方法與調用在類型中實際定義的方法之間沒有明顯的差異。

       

      給初學者的話: 一旦當你實現擴展方法后, 你只需要復制dll 添加文件命名空間; 或者復制cs文件到你的項目中, 就可以使用這些方法,  但是建議除非你有充分的理由才實現擴展方法。

       

      很多我們要用到的擴展方法都可以在網上得到, 所以一般在寫自己的擴展前請先搜索一下.

      本文來自于喜樂的ASP.NET(Alex Song) 轉貼請注明出處

      posted @ 2011-10-13 03:13  擁有的都是恩典  閱讀(14136)  評論(31)    收藏  舉報
      主站蜘蛛池模板: 亚洲人成电影在线天堂色| 久久精品国产99麻豆蜜月| 久久精品一本到99热免费| 亚洲精品久久久久久无码色欲四季| 真人性囗交视频| 亚洲人成电影网站色mp4| 亚洲顶级裸体av片| 四虎永久在线精品无码视频| 亚洲精品人成网线在线播放va| 2019国产精品青青草原| 亚洲色成人一区二区三区人人澡人人妻人人爽人人蜜桃麻豆 | 亚洲一区二区精品极品| 久久se精品一区精品二区| 成人免费A级毛片无码片2022| 亚洲色大成网站WWW国产| аⅴ天堂中文在线网| 亚洲最大日韩精品一区| 福利一区二区在线观看| 色综合一本到久久亚洲91| 国产亚洲精品久久久久秋霞| 武装少女在线观看高清完整版免费| 国模粉嫩小泬视频在线观看| 内射一区二区三区四区| 国产97视频人人做人人爱| ww污污污网站在线看com| 国产成人精品亚洲一区二区| 在线天堂中文www官网| 久热这里只有精品视频3| 国产精品久久久久久久网| 亚洲av不卡电影在线网址最新| 成人免费无遮挡在线播放| 成人免费A级毛片无码片2022| 大又大又粗又硬又爽少妇毛片| 久久亚洲av成人无码软件| 精品国产一区二区亚洲人| 亚洲熟女乱综合一区二区三区| 亚洲国产精品久久久久秋霞| 国产97视频人人做人人爱| 国产一区二区三区精品综合| 亚洲精品宾馆在线精品酒店| 亚洲精品动漫免费二区|