易截截图软件、单文件、免安装、纯绿色、仅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 自动排列 ......

SQL SERVER数据类型与C#数据类型对照表

bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。 Int64
int 从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。 Int32
smallint 从 -2^15 (-32,768) 到 ......

IBatisNet SQL Server的float类型转换为c# float出错

今天写一个商品的修改功能时遇到的问题
商品中重量 weight 的数据库(SQL Server2005)类型定义为 float
在mappings 中转换为c#类型的一句为
<result property="Goods_Weight" column="Goods_Weight" type="float" dbType="float"/>
按理说这个 float 是一样的,转换完全不会出现问题,
实际程序运行时,系统报错 ......

apss asp.net C# web 定时执行程序

using System;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;
using System.Timers;
using System.Data;
using System.Data.SqlClient;
namespace SMS_joke
{
/// <summary>
/// Global 的摘要说明。
/// </summary>
public class ......

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

在写sql语句时,一般都是一句解决,从来没想过说,把sql语句拆开来写。
例如下面这句:  string readstring = "select * from 实例 where 实例ID='"+eid+"'";
然后执行 Myconnection();
        DataSet ds = new DataSet();
        OleD ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号