代碼僅是為了說明怎麼分組,沒有實現,具體實現請參見本系列前面的文章。為了節省空間,很多代碼都寫成了一行。
前面提到的第二條缺點,我們改進後,方式二的顯示效果如下:
Equals、GetHashCode、ToString 實在去不了,哪位朋友有好辦法分享一下吧!不過這次把擴展方法的標志加上。實現比方式一麻煩一下:
1 public class ChineseString
2 {
3 private string s;
4 public ChineseString(string s) { this.s = s; }
5 public string GetValue() { return s; }
6 }
7
8 public static class CheseStringExtension
9 {
10 public static ChineseString AsChineseString(this string s) { return new ChineseString(s); }
11
12 public static string ToSBC(this ChineseString cs)
13 {
14 string s = cs.GetValue();//從ChineseString取出原string
15 char[] c = s.ToCharArray();
16 for (int i = 0; i < c.Length; i++)
17 {
18 if (c[i] == 32) { c[i] = (char)12288; continue; }
19 if (c[i] < 127) c[i] = (char)(c[i] + 65248);
20 }
21 return new string(c);
22 }
23 public static string ToDBC(this ChineseString cs) { throw new NotImplementedException(); }
24 public static string GetChineseSpell(this ChineseString cs) { throw new NotImplementedException(); }
25 }
這裡需要兩個類,一個類ChineseString作為AsXXX的返回值,第二個類ChineseStringExtension是對ChineseString進行擴展的類。能過這種方式,才能顯示出擴展的標識符號!每組擴展要兩個類,比較麻煩。
方式一、方式二感覺都不太好,而且擴展組多了,還會有新的問題出現,如下:
也是很要命的!再來看第三種方式,這是我和韋恩卑鄙在討論單一職責原則時想出來的,先看效果: