C#语言和类库

就象微软一贯的风格,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 Main () {
     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.Int32System.Long等等)、数组类型、事件类型、属性等等。在C#语言中,语言规范依赖于类库。

C++中,+是整型(包括intlong等等)变量的内置支持的操作,也非常容易理解。如果你想让某个自定义类也支持+操作,那么,你必须在这个自定义类上定义重载操作符+。也就是说,在C++中,存在一些内置的操作支持,但是这些内置的操作非常的精简,而且基本上可以采用计算机硬件实现。在C++中,语言规范不依赖于类库。

我们可以使用一张图更加清楚的说明我们上面的意思:

C#  VS  C++

我们的对比结果是:C++语言灵活,是对计算机硬件的一个高层抽象;C#语言方便,是依赖于底层类库的一个编程设施。

作为一个小小的论证,我们假设你使用C++语言的函数指针,假如你只是需要一个函数指针,简单的声明使用即可;在C#中,你不得不依赖于System.Delegate,即便是一个函数指针,你也不得不付出更高的数据空间(System.Delegate底层可能使用一个链表保存委托链)。

当然,对于大部分的程序来说,这似乎没有影响。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
常用方法类 一、SR.ShareFunc.DataFunc 1.SR.ShareFunc.DataFunc.DataConvertExcel(Data转Excel文件) 1.1 DataTable转Xls文件 4个重载方法 1.2 DataSet转Xls文件 4个重载方法 2.SR.ShareFunc.DataFunc.DataGridViewFunc(DataGridView方法) 2.1 DataGridView打印 9个重载方法 2.2 DataGridView转Xls文件 4个重载方法 3.SR.ShareFunc.DataFunc.DataTableConvertPdf(DataTable转Pdf文件) 6个重载方法 二、SR.ShareFunc.FormFunc 4.SR.ShareFunc.FormFunc.ControlConvertToForm(Control转Form窗体) 7个重载方法 5.SR.ShareFunc.FormFunc.CreateControlFunc (利用反射(需要制定Dll文件、命名空间)实现实例化、调用) 3个重载方法 三、SR.ShareFunc.RemoteDeskTop 6.SR.ShareFunc.RemoteDeskTop.ucRemoteDeskTop 远程桌面的监控界面控件 原理:利用System.Runtime.Remoting将监控端的鼠标、键盘消息发送到被监控主机, 并将被监控端桌面图片不停发送到监控端显示,从而实现远程桌面 可实现监视、监控,设置监控界面刷新时间 7.SR.ShareFunc.RemoteDeskTop.RemoteDeskTopClient 远程桌面客户端端口注册 四、SR.ShareFunc.StringFunc 8.SR.ShareFunc.StringFunc.RandomStrings 8.1 按照指定最大值、最小值、个数,随机生成数组 8.2 按照指定最大值、最小值、个数,随机生成字符格式的数字 9.SR.ShareFunc.StringFunc.StringEncryFunc 9.1 Dec方式加密 9.2 Dec方式解密 9.3 MD5加密 10.SR.ShareFunc.StringFunc.ValidateUnUsedCode 常用验证非法字符、格式转化 五、SR.ShareFunc.WinFunc 11.SR.ShareFunc.WinFunc.FileFunc 11.1 系统垃圾文件清理 11.2 文件的文件名、后缀名、文件路径的处理 11.3 同名文件的处理(用于自动在同名文件后增加字符) 12.SR.ShareFunc.WinFunc.LogFunc 按照指定路径、文件名生成日志信息 13.SR.ShareFunc.WinFunc.MouseMoveControl 给指定控件绑定鼠标移动事件,例如Label绑定后,鼠标点击该Label可进行窗体拖拽 或实现自定义的窗体拖拽 14.SR.ShareFunc.WinFunc.MsgShowFunc 自定义的Windows消息窗体,主要能显示错误代码显示。5个重载方法 15.SR.ShareFunc.WinFunc.SystemHotKey Windows全局钩子(系统热键),可以实现自定义的系统热键处理 16.SR.ShareFunc.WinFunc.WaitFormFunc 16.1 等待窗体显示(可指定显示的消息) 16.2 等待窗体关闭 17.SR.ShareFunc.WinFunc.WindowsFuns 17.1 Windows注销、重启、关机 17.2 获取Windows系统中硬件设备信息,如主板、网卡等 17.3 获取各种格式的系统时间、农历时间 17.4 获取Windows系统屏幕大小、系统剪贴板操作 六、SR.ShareFunc.XmlFunc 18.SR.ShareFunc.XmlFunc.XmlCommonFunc Xml文件操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值