WEB开发网
开发学院软件开发C语言 C#动静结合编程之一: 接口和委托的约束强度 阅读

C#动静结合编程之一: 接口和委托的约束强度

 2009-03-17 08:19:04 来源:WEB开发网   
核心提示:程序世界有两种神秘的元素,它们无处不在,C#动静结合编程之一: 接口和委托的约束强度,却常常未被察觉,它们一动一静,协议意味着运行时的不确定性,方法A完全可能在返回结果中装入非string类型的元素,却又和谐相处,我给这对兄弟取上不太恰当的名字

程序世界有两种神秘的元素,它们无处不在,却常常未被察觉。它们一动一静,却又和谐相处。我给这对兄弟取上不太恰当的名字,一个叫“协议”,一个叫“约束”。我们常常看到的动态语言、静态语言背后,本质上就是“协议”与“约束”两种元素的作用。

C#是一门优美的语言,它融合了静态和动态的优势,如果运用得当,必能动静结合,呈现出一种和谐之美。特别是.NET平台和语言的快速发展,更展现了动静结合编程的活力。本篇是.NET动静结合编程的第一篇,希望这个系列能和大家一起探讨如何在.NET平台上最大限度的发挥动静结合的潜能。

本人还只是.NET的初学者,对计算机理论的理解还很肤浅,文中错误欢迎批评指正,不足之处欢迎补充,谢谢!

PS:不加特殊说明时,本文提到的"动态"或“协议”是指程序的运行时协议,包括但不限于动态类型;“静态”或“约束”是指程序的编译时语法约束,而语义约束归为协议一类。

被忽略的协议

谈到“协议”,最先浮现在我们脑海中的可能是TCP/IP协议栈,但其实我们随处都在和协议打交道。下面的例子,你看出协议来了吗?

B(){
    ArrayList lst = A();
    foreach (string item in lst){
        Console.WriteLine(item.Length);
    }
}

方法B假定方法A遵守:返回的ArrayList内部都是string类型的元素。这就是它们之间的协议,这个协议不受编译器静态检查的约束。所以,协议意味着运行时的不确定性,方法A完全可能在返回结果中装入非string类型的元素,而这将导致B在运行时产生异常。

1 2  下一页

Tags:动静 结合 编程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接