程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 薛定谔的貓——.NET 4.1 中的新基類,開源Preview中

薛定谔的貓——.NET 4.1 中的新基類,開源Preview中

編輯:關於.NET

從“薛定谔的貓”說起:

哲學家薛定谔( Erwin Schrödinger)有個關於量 子理論的一個理想實驗,內容如下(懂量子物理學的園友請skip):

這個貓十分可憐,她(假設這是一只雌性的貓,以引起更多憐憫)被封在一個密室裡,密室裡有食物 有毒藥。毒藥瓶上有一個錘子,錘子由一個電子開關控制,電子開關由放射性原子控制。如果原子核衰變 ,則放出α粒子,觸動電子開關,錘子落下,砸碎毒藥瓶,釋放出裡面的氰化物氣體,雌貓必死無 疑。

哥本哈根派說,沒有測量之前,一個粒子的狀態模糊不清,處於各種可能性的混合疊加。比 如一個放射性原子,它何時衰變是完全概率性的。只要沒有觀察,它便處於衰變/不衰變的疊加狀態中, 只有確實地測量了,它才隨機選擇一種狀態而出現,這麼說來,因為我們沒有觀察,所以箱子裡的那個原 子處在衰變/不衰變的疊加狀態。因為原子的狀態不確定,所以貓的狀態也不確定,只有當我們打開箱子 察看,事情才最終定論:要麼貓四腳朝天躺在箱子裡死掉了,要麼它活蹦亂跳地“喵嗚”直叫 。問題是,當我們沒有打開箱子之前,這只貓處在什麼狀態?似乎唯一的可能就是,它和我們的原子一樣 處在疊加態,這只貓當時陷於一種死/活的混合。

薛定谔的貓表達了現實世界中的一種“不 確定態”,那麼,我們在OO編程時,能不能也體現出一種“不確定態”呢?

也就 是說:一個對象,當我們沒有使用它時,它是一個“String” 和“Cat”的疊加態 ,我們使用它時,它既可以是String也可以是Cat:

話又說回來,在編 程中,長期以來類型的轉換往往是比較嚴謹的:一個String對象“hello123”並不能被直接表 達成一個Int數值,因為這樣做往往會得到一個類型轉換的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對象其它類型的表現形式。

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” 兩種形態,也就是說,這是一個c#版的“薛定谔的 貓”。

這時一個SchrodingOr類型的對象,究竟是“TAlive” 還是 “TDead” ,需要由“觀察者”來確定:

就像下圖中的貓一 樣,這種不確定態已經完全的表現在我們的代碼中了:

System.QuantumEntanglement 技術預覽:

目前的.NET 4.1 Library正在早期預覽中, 但產品組決定放出這個System.QuantumEntanglement的類庫源碼,以及單元測試源碼,來收集用戶的反饋 信息,我們可以在這裡下載到:

Class library with unit tests (requires Visual Studio 2008 Professional and higher)

如果有任何問題,可以聯系:[email protected].

信息來源的鏈接(部分圖片來源):

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< /p>

出處:http://blodfox777.cnblogs.com/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved