從“薛定谔的貓”說起:
哲學家薛定谔( 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/