方法多态与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 更像是种协议,体现着开放与自由——我们欢迎你来参与,希望你能遵守彼此的协约;若你违背或没能完成指定安排,代价就是运行时异常。而静态类型检查更像是种约束,架了道门槛儿——想进来?先看自己够不够格儿!
开放与自由
相关文档:
下面这段C# 代码可以用来压缩和修复Access数据库,不管它是一个简单的".mdb"ACCESS数据库还是一个".mdw"网络共享数据库,这个过程和你在用MS Access应用程序中使用的"工具-数据库实用工具-压缩和修复"时执行的操作完全一样.实例代码使用了"迟绑定"(运行中在内存中建立COM对象),这样就不需要在工程中加入COM引用了,也不需要在P ......
用的是一种很笨的方法,但可以帮助初学者了解访问XML节点的过程。
已知有一个XML文件(bookstore.xml)如下:
<?xml version="1.0" encoding="gb2312"?>
<bookstore>
<book genre="fantasy" ISBN="2-3631-4">
<title>Oberon's Legacy</title>
&n ......
今天在网上找了许久关于sqlserver中存储image类型和读取image的方法,可是都是那么一点,故在此罗列一下,希望可以帮助大家。
首先是关于dataGridView的绑定。代码见下
private void button_show_Click(object sender, EventArgs e)
{
string sqlText = "server=localhost;initial catalog=Test; ......
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) 到 ......
本文转自:http://blog.csdn.net/jinjazz/archive/2008/07/14/2650506.aspx
将oledb读取的excel数据快速插入的sqlserver中,很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,最好的办法是使用bcp,也就是System.Data.SqlClient.SqlBulkCopy 类来实现。不但速度快,而且代码简单,下面测试代 ......