易截截图软件、单文件、免安装、纯绿色、仅160KB

方法多态与Duck typing;C#之拙劣与F#之优雅

文 / 李博(光宇广贞)
方法多态与类型多态
       了解 OOP 的同学对类型多态都很熟悉了。话说,类型多态之多态便体现在方法上,那方法多态又是嘛玩儿?类型多态之类型指的是对像的类型,其方法是受对像约束的。方法多态便是不受对像类型约束的多态。具体区别在:

方法多态无需继承;类型多态必须实现接口或类继承。
方法多态不管你是谁,只在乎你能干嘛;类型多态讲究你出自何门何派。
方法多态的对像兼容性只需其实现运行期被实际调用的方法部分;类型多态的对像兼容性要求 A is-a B,也即不管用得着用不着,只要你拜了师傅,就得全部实现。

Duck typing 与方法多态
       Duck typing 是种动态语言的程序设计风格,用以实践方法多态。概念提出者 James Whitcomb Riley 同学如是说:
       当看到一只鸟走起来像鸭子,游起泳来像鸭子,叫起来也像鸭子,那这只鸟就可以被当做鸭子。
       Duck typing 并不关注对像的类型,而是关注其表现。我们让某个对像去“走两步儿”,去“游两下”,去“叫两声”;若对像无法完成指定动作,则抛出运行时异常——它是运行期检查的。Duck typing 没有任何静态检查,如类型检查、属性检查、方法签名检查等。Guido van Rossum 同学认为,Duck typing 的安全性依赖良好的文档、清晰的代码和完备的测试。举一个 Python 语言的例子:
图一
       代码言简意赅。鸭子和人两种动物都会 Quack,于是均可传入 CheckAsDuck 方法处理。CheckAsDuck 只管丫会不会鸭叫,才不管丫是什么东西。而这种做法在 OOP 思想里是不可理喻的。
Duck typing 引发的严重问题
       Duck typing 表现了动态语言的程序设计思想,其与静态语言强调的类型检查不同之处在于:动态语言假设你会做某个动作,运行时可能会发现你其实做不来;静态语言必须运行前就得确定你能否做得来。Duck typing 更像是种协议,体现着开放与自由——我们欢迎你来参与,希望你能遵守彼此的协约;若你违背或没能完成指定安排,代价就是运行时异常。而静态类型检查更像是种约束,架了道门槛儿——想进来?先看自己够不够格儿!
       开放与自由


相关文档:

怎样在visual studio.NET 让C,C++,C#代码自动排齐

问题描述:
C#程序,里面copy了许多原来的代码,所以参差不齐的,很难读,如何才能让代码自动排齐,就象VS   6.0中可以使用快捷键,非常方便.
解答:
ctrl+a,先全选   
ctrl+k,ctrl+f,自动排列
或者
ctrl+a,先全选
alt+F8 自动排列 ......

java和c#的锁

要在Java中获得某一变量的锁,必须在代码的首尾二端加上synchronized关健字,指明需要获得锁的对象。一旦线程开始执行synchronized块中的代码,它就获得了对这一对象的锁的控制权。同样,一旦线程已经离开了synchronized块,它也将释放这一对象的锁。我们已经知道,C#也有一个相似的被称作lock的关健字。除了lock这个关健字 ......

C#连接ACESS时,sql语句有错

在写sql语句时,一般都是一句解决,从来没想过说,把sql语句拆开来写。
例如下面这句:  string readstring = "select * from 实例 where 实例ID='"+eid+"'";
然后执行 Myconnection();
        DataSet ds = new DataSet();
        OleD ......

socket通信java或c#中文乱码问题

C#中显示中文:

发送数据:  
  string   sReturnData   =   "你好";  
  Byte[]  
bReturnData   =   Encoding.ASCII.GetBytes(sReturnData.ToCharArray());  
 
m_sktSession.Send(bReturnData); 
【将出现乱码】
】  ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号