Spiga

薛定谔的猫——.NET 4.1 中的新基类,开源Preview中

2009-04-02 12:22 by LanceZhang, 3648 visits, 网摘, 收藏, 编辑

前言:

昨天一如既往地登上forums.asp.net答帖子,却被上面的一条滚动新闻雷到了:

.NET 4.1 Preview - New Base Class Library (BCL) Extension Methods - RFC

因为考虑到April 1st的关系,这是Scott Hanselman给大家开的玩笑,还是真的官方消息呢?

从“薛定谔的猫”说起:

哲学家薛定谔( 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)

如果有任何问题,可以联系: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

 


作者:Lance ZhangLance Zhang's Tech Blog
出处:http://blodfox777.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

0
0
(请您对文章做出评价)
« 上一篇:ASP.NET AJAX Advance Tips & Tricks (9) DropDownList在Firefox下的奇怪现象和解决方案——谁的BUG?
» 下一篇:设置TextBox中光标的位置到最后(set the cursor position in a TextBox or InputText)
Add your comment

30 条回复

  1. #1楼 MyCoolDog      2009-04-02 12:35
    顶 受教了

    沙你个发
      回复  引用  查看    
  2. #2楼 devil0153      2009-04-02 12:49
    终于看懂了,还好有一点点点点量子物理的基础知识,汗~~~
    不过M$确实是钱多了烧的,越搞越玄乎!!!
      回复  引用  查看    
  3. #3楼 JimLiu      2009-04-02 12:51
    我次奥!量子编程!!!???
    有点匪夷所思……

    P.S.我是被薛定谔的猫咪吸引进来的,LZ的插图很不错
      回复  引用  查看    
  4. #4楼 Nick Wang      2009-04-02 13:13
    不是很明白这样做的意义何在,建议LZ加上个为什么,或者这么作有什么好处,限制是什么(啥时候不用)。
      回复  引用  查看    
  5. #5楼 riccc      2009-04-02 13:14
    对于string<->int, string<->date这种,应当就是数据类型转换的问题
    对于对象,就是一个id(标志符的问题),比如生活中我们用一个姓名(字符串,id)来代表某个人
      回复  引用  查看    
  6. #6楼 Ariex[未注册用户]2009-04-02 13:25
    这辈子估计都没法理解量子物理里面的叠加态是个什么东西了……
    而且也还没有理解lz这篇文章里面提到的思想或者技术所应用到得地方在哪儿……
      回复  引用    
  7. #7楼 韦恩卑鄙      2009-04-02 13:32
    nullable<T>
    没什么大不了的
      回复  引用  查看    
  8. #8楼 OwnWaterloo[未注册用户]2009-04-02 13:43
    union ...
    boost:: any ...

    没什么大不了的
      回复  引用    
  9. #9楼 nontrick[未注册用户]2009-04-02 13:53
    这是愚人节恶搞
      回复  引用    
  10. #10楼[楼主] LanceZhang      2009-04-02 13:53
    @OwnWaterloo :)
      回复  引用  查看    
  11. #11楼 巫云      2009-04-02 13:55
    C语言的union?哈哈哈
      回复  引用  查看    
  12. #12楼[楼主] LanceZhang      2009-04-02 13:58
    @riccc

    嗯,我认为不尽相同
    数据类型转换并不是把一个对象以多种类型的方式展示出来
      回复  引用  查看    
  13. #13楼 Todd Wei      2009-04-02 14:05
    .net4.1,而且是4月1号,太巧合了吧,哈哈
      回复  引用  查看    
  14. #14楼 韦恩卑鄙      2009-04-02 14:08
    如果有任何问题,可以联系:mailto:aprilfools@example.com.

    有愚人节落款哦
      回复  引用  查看    
  15. #15楼[楼主] LanceZhang      2009-04-02 14:11
    --引用--------------------------------------------------
    韦恩卑鄙: 如果有任何问题,可以联系:mailto:aprilfools@example.com.

    有愚人节落款哦
    --------------------------------------------------------
    靠!竟然没注意到!!!!
      回复  引用  查看    
  16. #16楼[楼主] LanceZhang      2009-04-02 14:12
    他的原话是:


    Please send all questions, comments, and suggestions to string.or@microsoft.com.

    Many thanks,

    The .NET Framework Quantum Mechanics Team

    没想到mailto的链接是假的,被耍了~~~~~~~~~~~
      回复  引用  查看    
  17. #17楼 gOODiDEA      2009-04-02 14:14
    4.1
      回复  引用  查看    
  18. #18楼 waterhua[未注册用户]2009-04-02 14:18
    还真被微软忽悠了
      回复  引用    
  19. #19楼 DiryBoy      2009-04-02 15:03
    我还听说.Net4.1的一部分异常会改名,例如 Exception 改成 MotherOfAllExceptionsException,NotImplementedException 改成 OhDudeCanSomeoneWriteThisException.. 琢磨琢磨.Net4.1...
      回复  引用  查看    
  20. #20楼 亚历山大同志      2009-04-02 15:07
    var cat

    薛定谔 's CAT
      回复  引用  查看    
  21. #21楼 无常      2009-04-02 15:11
    4月1号讨论4.1版本的东西~~~~

    清明节快乐 ~~~
      回复  引用  查看    
  22. #22楼 兔子皮      2009-04-02 17:20
      大学里还学过“不确定原理”:一个微观粒子的某些物理量(如位置和动量,或方位角与动量矩,还有时间和能量等),不可能同时具有确定的数值,其中一个量越确定,另一个量的不确定程度就越大。
      这样看来,如果MS定义了一个统量,也就是我们可以接收的最极限的一个单元量,至于单元量的构成怎么怎么变化,我们不去确定它(现实中的很多的逻辑往往会非常复杂),我们关心的仅仅是外面内容(有点像Facade模式..),那么我们可以让代码所构成的东西处于一种相互牵制的多态中。。
      
      愚人节大家一起乱想一通,呵呵。^_^
      
      
      回复  引用  查看    
  23. #23楼 Anders Liu      2009-04-02 17:50
    我昨天也看到了。。。无论是从版本号上,还是从描述的场景,我都更相信这是个愚人节玩笑
      回复  引用  查看    
  24. #24楼 Jeffrey Zhao      2009-04-03 08:35
    @兔子皮
    是Uncertainty Principle,虽然一直翻译成“不确定原理”,但实际上应该是“测不准原理”——它们是确定的,只是“测不准”……
      回复  引用  查看    
  25. #25楼 Aspgreener      2009-04-03 08:36
    呵呵,愚人节惹的祸!
    -----------------------------------------------------
    专注于自己的网站。http://www.xiaoshiyiluokuang.com
      回复  引用  查看    
  26. #26楼 Jeffrey Zhao      2009-04-03 08:36
    @Anders Liu
    正好赶上.net 4,来个4.1,真及时!
      回复  引用  查看    
  27. #27楼 holywolf      2009-04-03 08:57
    很多巧合啊
      回复  引用  查看    
  28. #28楼 海洋——海纳百川,有容乃大.      2009-04-03 12:45
    哈哈,厉害!
      回复  引用  查看    
  29. #29楼 Figo Yang      2009-04-03 17:27
    无语。。
      回复  引用  查看    
  30. #30楼 StrongBird[未注册用户]2009-07-03 10:39
    这能和量子的叠加状态比吗,根本就是两回事情啊!微软为了吸引眼球真是什么都做得出啊!
      回复  引用