薛定谔的猫——.NET 4.1 中的新基类,开源Preview中
前言:
昨天一如既往地登上forums.asp.net答帖子,卻被上面的一條滾動(dòng)新聞雷到了:
.NET 4.1 Preview - New Base Class Library (BCL) Extension Methods - RFC
因?yàn)榭紤]到April 1st的關(guān)系,這是Scott Hanselman給大家開(kāi)的玩笑,還是真的官方消息呢?
從“薛定諤的貓”說(shuō)起:
哲學(xué)家薛定諤(?Erwin Schr?dinger)有個(gè)關(guān)于量子理論的一個(gè)理想實(shí)驗(yàn),內(nèi)容如下(懂量子物理學(xué)的園友請(qǐng)skip):
這個(gè)貓十分可憐,她(假設(shè)這是一只雌性的貓,以引起更多憐憫)被封在一個(gè)密室里,密室里有食物有毒藥。毒藥瓶上有一個(gè)錘子,錘子由一個(gè)電子開(kāi)關(guān)控制,電子開(kāi)關(guān)由放射性原子控制。如果原子核衰變,則放出α粒子,觸動(dòng)電子開(kāi)關(guān),錘子落下,砸碎毒藥瓶,釋放出里面的氰化物氣體,雌貓必死無(wú)疑。
哥本哈根派說(shuō),沒(méi)有測(cè)量之前,一個(gè)粒子的狀態(tài)模糊不清,處于各種可能性的混合疊加。比如一個(gè)放射性原子,它何時(shí)衰變是完全概率性的。只要沒(méi)有觀察,它便處于衰變/不衰變的疊加狀態(tài)中,只有確實(shí)地測(cè)量了,它才隨機(jī)選擇一種狀態(tài)而出現(xiàn),這么說(shuō)來(lái),因?yàn)槲覀儧](méi)有觀察,所以箱子里的那個(gè)原子處在衰變/不衰變的疊加狀態(tài)。因?yàn)樵拥臓顟B(tài)不確定,所以貓的狀態(tài)也不確定,只有當(dāng)我們打開(kāi)箱子察看,事情才最終定論:要么貓四腳朝天躺在箱子里死掉了,要么它活蹦亂跳地“喵嗚”直叫。問(wèn)題是,當(dāng)我們沒(méi)有打開(kāi)箱子之前,這只貓?zhí)幵谑裁礌顟B(tài)?似乎唯一的可能就是,它和我們的原子一樣處在疊加態(tài),這只貓當(dāng)時(shí)陷于一種死/活的混合。
?
薛定諤的貓表達(dá)了現(xiàn)實(shí)世界中的一種“不確定態(tài)”,那么,我們?cè)贠O編程時(shí),能不能也體現(xiàn)出一種“不確定態(tài)”呢?
也就是說(shuō):一個(gè)對(duì)象,當(dāng)我們沒(méi)有使用它時(shí),它是一個(gè)“String” 和“Cat”的疊加態(tài),我們使用它時(shí),它既可以是String也可以是Cat:
?
話又說(shuō)回來(lái),在編程中,長(zhǎng)期以來(lái)類(lèi)型的轉(zhuǎn)換往往是比較嚴(yán)謹(jǐn)?shù)?#xff1a;一個(gè)String對(duì)象“hello123”并不能被直接表達(dá)成一個(gè)Int數(shù)值,因?yàn)檫@樣做往往會(huì)得到一個(gè)類(lèi)型轉(zhuǎn)換的exception。
?
StringOr<TOther>
Ok,讓我們來(lái)看看大牛們給出的這個(gè)泛型類(lèi):
namespace?System.QuantumEntanglement?{????public?class?StringOr<TOther>?{
????????public?StringOr(string?stringValue,?TOther?otherValue);
????????public?string?StringValue?{?get;?}
????????public?TOther?OtherValue?{?get;?}
????}
}
?
這個(gè)StringOr類(lèi)將String和一個(gè)其它的類(lèi)型包裝在一起,并擁有兩個(gè)get訪問(wèn)器,分別返回兩種類(lèi)型的值,使用起來(lái)也非常簡(jiǎn)單:
可以通過(guò)訪問(wèn)OtherValue屬性來(lái)輕松的獲得userInput對(duì)象其它類(lèi)型的表現(xiàn)形式。
?
?
?
SchrodingOr<TDead, TAlive>
接下來(lái)我們?cè)倏纯催@個(gè)類(lèi):
namespace?System.QuantumEntanglement?{????public?class?SchrodingOr<TDead,?TAlive>?{
????????public?SchrodingOr(TDead?dead,?TAlive?alive);
????????public?TAlive?Alive?{?get;?}
????????public?TDead?Dead?{?get;?}
????}
}
?
與上面的StringOr類(lèi)相似,這個(gè)SchrodingOr也通過(guò)泛型來(lái)為對(duì)象提供了“TAlive” 和“TDead” 兩種形態(tài),也就是說(shuō),這是一個(gè)c#版的“薛定諤的貓”。
這時(shí)一個(gè)SchrodingOr類(lèi)型的對(duì)象,究竟是“TAlive” 還是“TDead” ,需要由“觀察者”來(lái)確定:
?就像下圖中的貓一樣,這種不確定態(tài)已經(jīng)完全的表現(xiàn)在我們的代碼中了:
?
?
?System.QuantumEntanglement 技術(shù)預(yù)覽:
?
目前的.NET 4.1 Library正在早期預(yù)覽中,但產(chǎn)品組決定放出這個(gè)System.QuantumEntanglement的類(lèi)庫(kù)源碼,以及單元測(cè)試源碼,來(lái)收集用戶(hù)的反饋信息,我們可以在這里下載到:
Class library with unit tests (requires Visual Studio 2008 Professional and higher)
如果有任何問(wèn)題,可以聯(lián)系:string.or@microsoft.com.
?
信息來(lái)源的鏈接(部分圖片來(lái)源):
http://weblogs.asp.net/leftslipper/archive/2009/04/01/the-string-or-the-cat-a-new-net-framework-library.aspx
http://blog.wekeroad.com/blog/cool-extension-methods-for-new-stringor/
http://lostintangent.com/2009/04/01/string-input-handling-quantum-mechanics/
http://www.hanselman.com/blog/NET41PreviewNewBaseClassLibraryBCLExtensionMethodsRFC.aspx
?
轉(zhuǎn)載于:https://www.cnblogs.com/blodfox777/archive/2009/04/02/1427972.html
總結(jié)
以上是生活随笔為你收集整理的薛定谔的猫——.NET 4.1 中的新基类,开源Preview中的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 深度篇——人脸识别(二) 人脸识别代码
- 下一篇: Comet OJ 夏季欢乐赛 完全k叉树