国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#激爽特性——擴展方法

2019-11-17 02:21:05
字體:
來源:轉載
供稿:網友

C#激爽特性——擴展方法

在最近的學習中,發現了一種用起來特別爽的C#特性——擴展方法,之前拜讀《大話設計模式》一書的時候,書中提到這樣一句話:“反射,反射,程序員的快樂”,本人菜鳥一只,到現在還未曾使用過反射,對于其是否真的快樂自然無從體會,不過擴展方法用起來稱得上是相當快樂!

擴展方法使你能夠向現有類型”添加“方法,而無需創建新的派生類型、重新編譯或以其他方法修改原始類型。擴展方法是一種特殊的靜態方法,但可以像擴展類型上的實力方法一樣進行調用。對于C#和Visual Basic 編寫的客戶端代碼,調用擴展方法與調用在類型中實際定義的方法之間沒有明顯的差異。

——MSDN中對于擴展方法的解釋

剛開始學習C#的時候,經常碰到各種需要狀態轉換的場合,那個時候代碼里常常是大坨大坨的Convert.ToXX();當時非常羨慕String類可以直接調用ToString方法,省時省力,代碼看起來還特別美觀,之后學會了把Convert.ToXX()打包到一個方法里,代碼不那么冗余了,但還是不甚美觀,且費時費力,直到今天,我發現了C#中這個讓人激爽無比的特性,這件事情終于有了完美的解決方案!

下面來看一下基本的語法:

public static 返回類型 方法名(this 需要添加擴展方法的類名 變量名,,,){    return;}

舉個栗子:

首先我們寫這樣一個類:

namespace ExtensionMethods{    public static class ExtensionMethods    {        public static int ToInt(this string s)        {            return Convert.ToInt32(s);        }    }}

然后只需要在另一個類中引用這個類的命名空間,就可以方便地使用我們寫好的擴展方法進行類型轉換了:

using ExtensionMethods;namespace xxx{    public static class xxxx    {        public static int Test()        {            int i = "123".ToInt();        }    }}

怎么樣?是不是感覺一股涼氣當頭灌下——真爽啊!

別急,光這樣怎么能夠滿足我們的需求呢,接下來我們繼續優化

1.每次還需要引用命名空間,太浪費時間精力

解決方案:將擴展方法直接放到類型所在的命名空間下

依舊以上面的代碼為例,就是:

namespace System{    public static class ExtensionMethods    {        public static int ToInt(this string s)        {            return Convert.ToInt32(s);        }    }}

這樣,我們在項目中加入了這個類之后,在項目的任何位置就都可以來方面的由String轉化為Int了

但是這樣就夠了么?No!No!No!,舉個栗子,如果參數String并不是數字類型的時候會怎么樣呢?

2.如果輸入的String并不能轉化為數字,會報錯

解決方案:加入另一個參數為默認值,若不能轉化成功,則返回默認值

代碼如下:

public static int ToInt32(this string s, int def = default(int)){    int result;    return Int32.TryParse(s, out result) ? result : def;}

按照上面的思路,我們可以打包一個包含各種常用類型轉換的類,寫程序的時候只要直接加入這個類,就可以方便地進行各種進制轉換了.

下面提供一個自用的Convert類Convert.zip


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 五寨县| 卓资县| 乐平市| 托克逊县| 安福县| 临颍县| 伊宁县| 华坪县| 田阳县| 麻阳| 桦南县| 长乐市| 攀枝花市| 长葛市| 安国市| 甘谷县| 梁平县| 西吉县| 房产| 山丹县| 巴林右旗| 新宁县| 固阳县| 香港| 龙州县| 汝城县| 宁晋县| 陵水| 藁城市| 望奎县| 什邡市| 庆元县| 滨海县| 措美县| 乌拉特中旗| 平南县| 黄陵县| 达孜县| 台南县| 凤阳县| 绥宁县|