程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# 3.0新特性初步研究 Part2:使用擴展方法

C# 3.0新特性初步研究 Part2:使用擴展方法

編輯:關於C語言

擴展方法(Extension Method)
可以為已有的類型添加新的方法定義和實現,比如int類型目前沒有一個名叫xxxyyy()的方法,
那麼通過使用擴展方法,我們可以為int類型添加一個xxxyyy()方法。
這個有點類似於用來擴展系統功能的某些設計模式。

下面我們用代碼來說話:
這是我們以前的寫法:

   1public static class Extensions
 2{
 3    public static string CamelCase(string identifIEr)
 4{
 5            string newString = "";
 6            bool sawUnderscore = false;
 7
 8            foreach (char c in identifIEr)
 9            {
10                if ((newString.Length == 0) && Char.IsLetter(c))
11                    newString += Char.ToUpper(c);
12                else if (c == '_')
13                    sawUnderscore = true;
14                else if (sawUnderscore)
15                {
16                        newString += Char.ToUpper(c);
17                        sawUnderscore = false;
18                }
19                else
20                        newString += c;
21        }
22
23            return newString;
24}           
25}
26
27static void Main(string[] args)
28{
29string[] identifIErs = new string[] {
30         "do_something",
31         "find_all_objects",
32          "get_last_dict_entry"
33         };
34
35foreach (string s in identifIErs)
36     Console.WriteLine("{0} becomes: {1}", s, Extensions.CamelCase(s));
37}
38
C# 3.0中我們可以這樣寫:
 1public static class Extensions
 2{
 3    public static string CamelCase(this string identifIEr)
 4{
 5            string newString = "";
 6            bool sawUnderscore = false;
 7
 8            foreach (char c in identifIEr)
 9            {
10                if ((newString.Length == 0) && Char.IsLetter(c))
11                    newString += Char.ToUpper(c);
12                else if (c == '_')
13                    sawUnderscore = true;
14                else if (sawUnderscore)
15                {
16                        newString += Char.ToUpper(c);
17                        sawUnderscore = false;
18                }
19                else
20                        newString += c;
21        }
22
23            return newString;
24}           
25}
26
27static void Main(string[] args)
28{
29string[] identifIErs = new string[] {
30         "do_something",
31         "find_all_objects",
32          "get_last_dict_entry"
33         };
34
35foreach (string s in identifIErs)
36     Console.WriteLine("{0} becomes: {1}", s, Extensions.CamelCase(s));
37}
主要是下面這兩個語句的變化:
1public static string CamelCase(this string identifIEr)
2Console.WriteLine("{0} becomes: {1}", s, s.CamelCase());
變量s原本是一個string類型,並沒有CamelCase()方法,但是我們在CamelCase()方法的參數列表最前面加上一個this關鍵字,
則string s就擁有了一個新的方法CamelCase,很簡單也很直接 :)

下面我們看一看一個稍微復雜一點的應用:
 1public static class Extensions
 2{
 3public static List<T> Combine<T>(this List<T> a, List<T> b)
 4{
 5    var newList = new List<T>(a);
 6    newList.AddRange(b);
 7    return newList;
 8}   
 9}
10
11static void Main(string[] args)
12{
13var odds = new List<int>();
14odds.Add(1);
15odds.Add(3);
16odds.Add(5);
17odds.Add(7);
18
19var evens = new List<int>();
20evens.Add(0);
21evens.Add(2);
22evens.Add(4);
23evens.Add(6);
24
25var both = odds.Combine(evens);
26Console.WriteLine("Contents of 'both' list:");
27foreach (int i in both)
28     Console.WriteLine(i);
29}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved