C#语言和类库
来源:互联网 发布:网络端游排行榜2017 编辑:程序博客网 时间:2024/06/01 09:04
就象微软一贯的风格,C#语言非常的方便。当你想快速的构造一个应用程序的时候,C#语言的效率非常的高。很显然,微软的类库和默认的处理机制在发挥着作用。作为一个程序员,你可以不用关系这些;因为在大多数的情况下,微软的这些默认的处理机制正好是你所需要的。
作为一个C++语言的爱好者和使用者,我更加关心的是,那些是语言本身的定义,那些是类库和默认的处理机制。
当我第一次好奇的考察C#语言的委托机制的时候,下面的代码使我大为的惊讶:
delegate void D(int x);
class C
{
public static void M1(int i) {...}
public static void M2(int i) {...}
}
class Test
{
static void
D cd1 = new D(C.M1); // M1
D cd2 = new D(C.M2); // M2
D cd3 = cd1 + cd2; // M1 + M2
D cd4 = cd3 + cd1; // M1 + M2 + M1
D cd5 = cd4 + cd3; // M1 + M2 + M1 + M1 + M2
}
}
如果说Main函数的第一行和第二行还可以理解的话,那么以后的函数代码使我迷惑不解。+怎么发生的呢?后来我逐渐的明白,当你声明一个委托的时候,实际上是声明了一个从System.Delegate类继承的子类,而+无非是作为System.Delegate的成员函数被继承下来。在C#语言中,存在大量的这样的语言本身依赖于底层API的情况,例如各种基本类型到从System.ValueType继承的类型(System.Int32,System.Long等等)、数组类型、事件类型、属性等等。在C#语言中,语言规范依赖于类库。
在C++中,+是整型(包括int、long等等)变量的内置支持的操作,也非常容易理解。如果你想让某个自定义类也支持+操作,那么,你必须在这个自定义类上定义重载操作符+。也就是说,在C++中,存在一些内置的操作支持,但是这些内置的操作非常的精简,而且基本上可以采用计算机硬件实现。在C++中,语言规范不依赖于类库。
我们可以使用一张图更加清楚的说明我们上面的意思:
我们的对比结果是:C++语言灵活,是对计算机硬件的一个高层抽象;C#语言方便,是依赖于底层类库的一个编程设施。
作为一个小小的论证,我们假设你使用C++语言的函数指针,假如你只是需要一个函数指针,简单的声明使用即可;在C#中,你不得不依赖于System.Delegate,即便是一个函数指针,你也不得不付出更高的数据空间(System.Delegate底层可能使用一个链表保存委托链)。
当然,对于大部分的程序来说,这似乎没有影响。
- C#语言和类库
- Jave语言和C#语言
- C#和C语言
- C#语言和数据库技术基础
- C#语言和doNet框架
- C++的类和C#的类[zt]-.NET教程,C#语言 (转)
- C#简介- 类和对象,选自《C#编程语言详解》,送给新手
- IP地址(C#语言)和正则表达式
- C# 语言和 .NET Framework 介绍
- C# 3.0 新语言特性和改进
- C# 语言和 .NET Framework 介绍
- C# 语言参考 ref和out
- C#语言 创建和启动线程
- 数据结构和算法 - C#语言描述
- C# 语言和 .NET Framework 介绍
- C#语言中泛型的使用和性能
- C#语言转义字符(\xhhhh和\udddd)
- C# 3.0新语言特性和改进
- Oracle传统基本体系结构初步介绍
- 轻松学习贯穿Oracle的25条基本知识
- wrapper class
- Eclipse 相关的一些资源(转)
- 领域模式与表模式的异同
- C#语言和类库
- [转]如何分离个人信息,缓存动态页面
- Struts+Spring+Hibernate实现上传下载
- eclipse3.1.1的中文化!
- 页面中有两个BUTTON,如何按回车触发TEXTBOX所属的BUTTON
- 实施互联网商务智能的八项策略
- Eclipse看源码
- 数学牛人们的轶事[上]
- [JavaScript]只能输入数字