四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

[你必須知道的.NET]第二十一回:認(rèn)識(shí)全面的null

系列文章導(dǎo)航:

[你必須知道的.NET] 開(kāi)篇有益

[你必須知道的.NET] 第一回:恩怨情仇:is和as

[你必須知道的.NET] 第二回:對(duì)抽象編程:接口和抽象類(lèi)

[你必須知道的.NET] 第三回:歷史糾葛:特性和屬性

[你必須知道的.NET] 第四回:后來(lái)居上:class和struct

[你必須知道的.NET] 第五回:深入淺出關(guān)鍵字---把new說(shuō)透

[你必須知道的.NET] 第六回:深入淺出關(guān)鍵字---base和this

[你必須知道的.NET] 第七回:品味類(lèi)型---從通用類(lèi)型系統(tǒng)開(kāi)始

[你必須知道的.NET] 第八回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(上)-內(nèi)存有理

[你必須知道的.NET] 第九回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(中)-規(guī)則無(wú)邊

[你必須知道的.NET] 第十回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(下)-應(yīng)用征途

[你必須知道的.NET] 第十一回:參數(shù)之惑---傳遞的藝術(shù)(上)

[你必須知道的.NET] 第十二回:參數(shù)之惑---傳遞的藝術(shù)(下)

[你必須知道的.NET] 第十三回:從Hello, world開(kāi)始認(rèn)識(shí)IL

[你必須知道的.NET] 第十四回:認(rèn)識(shí)IL代碼---從開(kāi)始到現(xiàn)在

[你必須知道的.NET] 第十五回:繼承本質(zhì)論

[你必須知道的.NET] 第十六回:深入淺出關(guān)鍵字---using全接觸

[你必須知道的.NET] 第十七回:貌合神離:覆寫(xiě)和重載

[你必須知道的.NET] 第十八回:對(duì)象創(chuàng)建始末(上)

[你必須知道的.NET] 第十九回:對(duì)象創(chuàng)建始末(下)

[你必須知道的.NET]第二十回:學(xué)習(xí)方法論

[你必須知道的.NET]第二十一回:認(rèn)識(shí)全面的null

[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問(wèn)題思考

[你必須知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二


[你必須知道的.NET]第二十一回:認(rèn)識(shí)全面的null

說(shuō)在,開(kāi)篇之前

null、nullable、??運(yùn)算符、null object模式,這些閃亮的概念在你眼前晃動(dòng),我們有理由相信“存在即合理”,事實(shí)上,null不光合理,而且重要。本文,從null的基本認(rèn)知開(kāi)始,逐層了解可空類(lèi)型、??運(yùn)算符和null object模式,在循序之旅中了解不一樣的null。

你必須知道的.NET,繼續(xù)全新體驗(yàn),分享更多色彩。

                                                                                                                       www.anytao.com

系列文章導(dǎo)航:

[你必須知道的.NET] 開(kāi)篇有益

[你必須知道的.NET] 第一回:恩怨情仇:is和as

[你必須知道的.NET] 第二回:對(duì)抽象編程:接口和抽象類(lèi)

[你必須知道的.NET] 第三回:歷史糾葛:特性和屬性

[你必須知道的.NET] 第四回:后來(lái)居上:class和struct

[你必須知道的.NET] 第五回:深入淺出關(guān)鍵字---把new說(shuō)透

[你必須知道的.NET] 第六回:深入淺出關(guān)鍵字---base和this

[你必須知道的.NET] 第七回:品味類(lèi)型---從通用類(lèi)型系統(tǒng)開(kāi)始

[你必須知道的.NET] 第八回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(上)-內(nèi)存有理

[你必須知道的.NET] 第九回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(中)-規(guī)則無(wú)邊

[你必須知道的.NET] 第十回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(下)-應(yīng)用征途

[你必須知道的.NET] 第十一回:參數(shù)之惑---傳遞的藝術(shù)(上)

[你必須知道的.NET] 第十二回:參數(shù)之惑---傳遞的藝術(shù)(下)

[你必須知道的.NET] 第十三回:從Hello, world開(kāi)始認(rèn)識(shí)IL

[你必須知道的.NET] 第十四回:認(rèn)識(shí)IL代碼---從開(kāi)始到現(xiàn)在

[你必須知道的.NET] 第十五回:繼承本質(zhì)論

[你必須知道的.NET] 第十六回:深入淺出關(guān)鍵字---using全接觸

[你必須知道的.NET] 第十七回:貌合神離:覆寫(xiě)和重載

[你必須知道的.NET] 第十八回:對(duì)象創(chuàng)建始末(上)

[你必須知道的.NET] 第十九回:對(duì)象創(chuàng)建始末(下)

[你必須知道的.NET]第二十回:學(xué)習(xí)方法論

[你必須知道的.NET]第二十一回:認(rèn)識(shí)全面的null

[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問(wèn)題思考

[你必須知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二


 

2 Nullable<T>(可空類(lèi)型)

一直以來(lái),null都是引用類(lèi)型的特有產(chǎn)物,對(duì)值類(lèi)型進(jìn)行null操作將在編譯器拋出錯(cuò)誤提示,例如:

            //拋出編譯時(shí)錯(cuò)誤
            int i = null;  
            if (i == null)
            {
                Console.WriteLine("i is null.");
            }

系列文章導(dǎo)航:

[你必須知道的.NET] 開(kāi)篇有益

[你必須知道的.NET] 第一回:恩怨情仇:is和as

[你必須知道的.NET] 第二回:對(duì)抽象編程:接口和抽象類(lèi)

[你必須知道的.NET] 第三回:歷史糾葛:特性和屬性

[你必須知道的.NET] 第四回:后來(lái)居上:class和struct

[你必須知道的.NET] 第五回:深入淺出關(guān)鍵字---把new說(shuō)透

[你必須知道的.NET] 第六回:深入淺出關(guān)鍵字---base和this

[你必須知道的.NET] 第七回:品味類(lèi)型---從通用類(lèi)型系統(tǒng)開(kāi)始

[你必須知道的.NET] 第八回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(上)-內(nèi)存有理

[你必須知道的.NET] 第九回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(中)-規(guī)則無(wú)邊

[你必須知道的.NET] 第十回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(下)-應(yīng)用征途

[你必須知道的.NET] 第十一回:參數(shù)之惑---傳遞的藝術(shù)(上)

[你必須知道的.NET] 第十二回:參數(shù)之惑---傳遞的藝術(shù)(下)

[你必須知道的.NET] 第十三回:從Hello, world開(kāi)始認(rèn)識(shí)IL

[你必須知道的.NET] 第十四回:認(rèn)識(shí)IL代碼---從開(kāi)始到現(xiàn)在

[你必須知道的.NET] 第十五回:繼承本質(zhì)論

[你必須知道的.NET] 第十六回:深入淺出關(guān)鍵字---using全接觸

[你必須知道的.NET] 第十七回:貌合神離:覆寫(xiě)和重載

[你必須知道的.NET] 第十八回:對(duì)象創(chuàng)建始末(上)

[你必須知道的.NET] 第十九回:對(duì)象創(chuàng)建始末(下)

[你必須知道的.NET]第二十回:學(xué)習(xí)方法論

[你必須知道的.NET]第二十一回:認(rèn)識(shí)全面的null

[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問(wèn)題思考

[你必須知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二


3 ??運(yùn)算符

在實(shí)際的程序開(kāi)發(fā)中,為了有效避免發(fā)生異常情況,進(jìn)行null判定是經(jīng)常發(fā)生的事情,例如對(duì)于任意對(duì)象執(zhí)行ToString()操作,都應(yīng)該進(jìn)行必要的null檢查,以免發(fā)生不必要的異常提示,我們常常是這樣實(shí)現(xiàn)的:

            object obj = new object();
 
            string objName = string.Empty;
            if (obj != null)
            {
                objName = obj.ToString();
            }
 
            Console.WriteLine(objName);

系列文章導(dǎo)航:

[你必須知道的.NET] 開(kāi)篇有益

[你必須知道的.NET] 第一回:恩怨情仇:is和as

[你必須知道的.NET] 第二回:對(duì)抽象編程:接口和抽象類(lèi)

[你必須知道的.NET] 第三回:歷史糾葛:特性和屬性

[你必須知道的.NET] 第四回:后來(lái)居上:class和struct

[你必須知道的.NET] 第五回:深入淺出關(guān)鍵字---把new說(shuō)透

[你必須知道的.NET] 第六回:深入淺出關(guān)鍵字---base和this

[你必須知道的.NET] 第七回:品味類(lèi)型---從通用類(lèi)型系統(tǒng)開(kāi)始

[你必須知道的.NET] 第八回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(上)-內(nèi)存有理

[你必須知道的.NET] 第九回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(中)-規(guī)則無(wú)邊

[你必須知道的.NET] 第十回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(下)-應(yīng)用征途

[你必須知道的.NET] 第十一回:參數(shù)之惑---傳遞的藝術(shù)(上)

[你必須知道的.NET] 第十二回:參數(shù)之惑---傳遞的藝術(shù)(下)

[你必須知道的.NET] 第十三回:從Hello, world開(kāi)始認(rèn)識(shí)IL

[你必須知道的.NET] 第十四回:認(rèn)識(shí)IL代碼---從開(kāi)始到現(xiàn)在

[你必須知道的.NET] 第十五回:繼承本質(zhì)論

[你必須知道的.NET] 第十六回:深入淺出關(guān)鍵字---using全接觸

[你必須知道的.NET] 第十七回:貌合神離:覆寫(xiě)和重載

[你必須知道的.NET] 第十八回:對(duì)象創(chuàng)建始末(上)

[你必須知道的.NET] 第十九回:對(duì)象創(chuàng)建始末(下)

[你必須知道的.NET]第二十回:學(xué)習(xí)方法論

[你必須知道的.NET]第二十一回:認(rèn)識(shí)全面的null

[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問(wèn)題思考

[你必須知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二


4 Nulll Object模式

模式之于設(shè)計(jì),正如秘笈之于功夫。正如我們前文所述,null在程序設(shè)計(jì)中具有舉足輕重的作用,因此如何更優(yōu)雅的處理“對(duì)象為空”這一普遍問(wèn)題,大師們提出了Null Object Pattern概念,也就是我們常說(shuō)的Null Object模式。例如Bob大叔在《敏捷軟件開(kāi)發(fā)--原則、模式、實(shí)踐》一書(shū),Martin Fowler在《Refactoring: Improving the Design of Existing Code》一書(shū),都曾就Null Object模式展開(kāi)詳細(xì)的討論,可見(jiàn)23中模式之外還是有很多設(shè)計(jì)精髓,可能稱(chēng)為模式有礙經(jīng)典。但是仍然值得我們挖據(jù)、探索和發(fā)現(xiàn)。
下面就趁熱打鐵,在null認(rèn)識(shí)的基礎(chǔ)上,對(duì)null object模式進(jìn)行一點(diǎn)探討,研究null object解決的問(wèn)題,并提出通用的null object應(yīng)用方式。
解決什么問(wèn)題?
簡(jiǎn)單來(lái)說(shuō),null object模式就是為對(duì)象提供一個(gè)指定的類(lèi)型,來(lái)代替對(duì)象為空的情況。說(shuō)白了就是解決對(duì)象為空的情況,提供對(duì)象“什么也不做”的行為,這種方式看似無(wú)聊,但卻是很聰明的解決之道。舉例來(lái)說(shuō),一個(gè)User類(lèi)型對(duì)象user需要在系統(tǒng)中進(jìn)行操作,那么典型的操作方式是:

            if (user != null)
            {
                manager.SendMessage(user);
            }

系列文章導(dǎo)航:

[你必須知道的.NET] 開(kāi)篇有益

[你必須知道的.NET] 第一回:恩怨情仇:is和as

[你必須知道的.NET] 第二回:對(duì)抽象編程:接口和抽象類(lèi)

[你必須知道的.NET] 第三回:歷史糾葛:特性和屬性

[你必須知道的.NET] 第四回:后來(lái)居上:class和struct

[你必須知道的.NET] 第五回:深入淺出關(guān)鍵字---把new說(shuō)透

[你必須知道的.NET] 第六回:深入淺出關(guān)鍵字---base和this

[你必須知道的.NET] 第七回:品味類(lèi)型---從通用類(lèi)型系統(tǒng)開(kāi)始

[你必須知道的.NET] 第八回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(上)-內(nèi)存有理

[你必須知道的.NET] 第九回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(中)-規(guī)則無(wú)邊

[你必須知道的.NET] 第十回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(下)-應(yīng)用征途

[你必須知道的.NET] 第十一回:參數(shù)之惑---傳遞的藝術(shù)(上)

[你必須知道的.NET] 第十二回:參數(shù)之惑---傳遞的藝術(shù)(下)

[你必須知道的.NET] 第十三回:從Hello, world開(kāi)始認(rèn)識(shí)IL

[你必須知道的.NET] 第十四回:認(rèn)識(shí)IL代碼---從開(kāi)始到現(xiàn)在

[你必須知道的.NET] 第十五回:繼承本質(zhì)論

[你必須知道的.NET] 第十六回:深入淺出關(guān)鍵字---using全接觸

[你必須知道的.NET] 第十七回:貌合神離:覆寫(xiě)和重載

[你必須知道的.NET] 第十八回:對(duì)象創(chuàng)建始末(上)

[你必須知道的.NET] 第十九回:對(duì)象創(chuàng)建始末(下)

[你必須知道的.NET]第二十回:學(xué)習(xí)方法論

[你必須知道的.NET]第二十一回:認(rèn)識(shí)全面的null

[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問(wèn)題思考

[你必須知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二


通過(guò)強(qiáng)制將User屬性實(shí)現(xiàn)為null,在調(diào)用Login時(shí)仍然能夠保證系統(tǒng)的穩(wěn)定性,有效避免對(duì)null的判定操作,這至少可以讓我們的系統(tǒng)少了很多不必要的判定代碼。

詳細(xì)的代碼可以通過(guò)本文最后的下載空間進(jìn)行下載。實(shí)際上,可以通過(guò)引入Facotry Method模式來(lái)構(gòu)建對(duì)于User和NullUser的創(chuàng)建工作,這樣就可以完全消除應(yīng)用if進(jìn)行判斷的僵化,不過(guò)那是另外一項(xiàng)工作罷了。

當(dāng)然,這只是null object的一種實(shí)現(xiàn)方案,在此對(duì)《Refactoring》一書(shū)的示例進(jìn)行改良,完成更具有.NET特色的null object實(shí)現(xiàn),你也可以請(qǐng)NullUser繼承Use并添加相應(yīng)的IsNull判定屬性來(lái)完成。

借力c# 3.0的Null object

在C# 3.0中,Extension Method(擴(kuò)展方法)對(duì)于成就LINQ居功至偉,但是Extension Method的神奇遠(yuǎn)不是止于LINQ。在實(shí)際的設(shè)計(jì)中,靈活而巧妙的應(yīng)用,同樣可以給你的設(shè)計(jì)帶來(lái)意想不到的震撼,以上述User為例我們應(yīng)用Extension Method來(lái)取巧實(shí)現(xiàn)更簡(jiǎn)潔IsNull判定,代替實(shí)現(xiàn)INullable接口的方法而采用更簡(jiǎn)單的實(shí)現(xiàn)方式。重新構(gòu)造一個(gè)實(shí)現(xiàn)相同功能的擴(kuò)展方法,例如:

    // Copyright   : www.anytao.com        
    // Author      : Anytao,http://www.anytao.com        
    // Release     : 2008/07/31 1.0
 
    public static class UserExtension
    {
        public static bool IsNull(this User user)
        {
            return null == user;
        }
    }

NET技術(shù)[你必須知道的.NET]第二十一回:認(rèn)識(shí)全面的null,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 美女网站视频在线| 死神来了电影| 在线播放网站| lol小孩子不能看的动画视频| 张子恩| 《风流艳妇》| 五亿探长雷洛传| 无涯:杜琪峰的电影世界 电影| 女幽灵| 四川经济频道节目表| 陈一龙是哪部电视剧| 大内密探灵灵狗| 补锌之王的食物| 误杀2剧情详细介绍| 三年电影免费完整版| 神出鬼没电影| 五年级下册第四单元语文园地| 猛鬼追魂| 暗夜尖叫1988美国版高清观看| 燃冬海报| 郑业成个人详细简历| 文琪演过的电视剧有哪些| 文艺性说明文和科普性说明文的区别| 《千年僵尸王》电影| 绝岭雄风| 最佳嫌疑人电影免费观看| 噜啊噜在线视频| accesscode在线播放| 香水有毒微电影无删减完整版 | 海神号遇险记| 电影《大突围》免费观看完整版| 色在线视频观看| 黄电影在线观看| 地火电视剧38集| 成人生活| 安吉拉电影| 复制情人之意识转移| 李欣聪个人资料| 李采潭和闵度允| 故都的秋ppt| 光彩年华|