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