C#初印象

来源:互联网 发布:前台收银软件 编辑:程序博客网 时间:2024/06/11 18:58

初学C#,有些不太习惯(By Michael)

1.  内存之痛。。。

     在C++中,在堆上分配的内存必须手动回收。即new和delete操作符是要成对使用的。这种方式给程序员提供了强大而灵活的控制能力,程序员可以控制何时销毁对象,回收内存。这种控制能力,令C++程序员感到自己对程序具有很强的驾驭能力,因此对此功能津津乐道。但是,这种手动回收机制,非常的难以控制,即使经验丰富的 C++程序员,也难免疏漏,导致程序中发生内存泄露,轻则导致系统运行越来越慢,重则最终崩溃。这也是手动回收机制所最为人所诟病的地方。

      因此,在很多所谓的现代程序语言中,如Java,C#,都提供了自动垃圾回收机制。在对象不再被引用后,系统自动负责销毁对象,回收内存。在托管C++中,通过语言扩展,也可以实现垃圾的自动回收。

     从C/C++中走来,内存的问题的确臭名昭著。。。在接触了C#了以后,仍感觉相当的不爽。C/C++中你扔了垃圾(内存)就必需自己手动的捡起来,C#号称有垃圾回收机制,不让你捡,又不告诉你什么时候回收,总觉得不能相信它什么时候能准确的帮我回收回来。MS我还没看到介绍手动回收的功能,也许有,但是很麻烦。这种机制,就好像你借了钱给别人,别人和你说:我一定会还给你的!但是他没告诉你他要什么时候还给你!可恶的是他还老问你借,不是一回两回!而且你不能不借给他,真让你欲哭无泪。

 

2.  指针

     指针与内存息息相关,很多时候,从C++的角度看来会做到内存泄漏的或者指针悬挂的地方,C#告诉你:不要担心,没事的,信春哥,得永生。。。久而久之,好像对内存的关心慢慢的降低了,对业务的逻辑可以更专注。从软件开发角度看来看,开发速度的确可以增加很多,但个人感觉若长期这么下去,会丧失对内存的敏锐触觉。我很兴幸学的第一门语言不是Java,VB,C#...而是C++,使得对内存的操控的控制欲望尤其强烈,更加重了对其他“智能化”语言的排斥。所以我还是不信春哥的。

 

3.  委托

     微软如是说:

 

    这是要干什么?把函数赋值给一个委托类对象,就堂而皇之地把它当参数来进行使用,委托对象还可以相加,多个函数操作同一块内存!你真以为这就开辟了新纪元了吗,真不懂在搞什么。整天就告诉你,我是安全的,我是安全的,你放心用吧!微软只能用这种方法来说服读者了吗?真是个委了的托。。。

 4. 继承

    整天说C++的多继承只有华丽的外表,而一点都不实用,用起来还会搞得人头昏脑胀。微软为了牛B一下,C#把多继承取消掉了,和Java一样,只有单继承了。但转个弯,在类中又挖个小洞,曰:接口(Interface)。。。多接口可以实现多继承的功能,这不是自欺欺人吗?搞不懂。

 5. 类型转换

      可以在同一表达式中混合使用 decimal 和数值整型。但是,不进行强制转换就混合使用 decimal 和浮点型将导致编译错误。

      你可不可以有个原则啊?吃里扒外啊,int和decimal联手欺负float,这算什么啊?要强制一起强制,不行就得像C这样有个向高精度转换的原则,这么搞,弄得无所适从。

 6. string

     string从来就不是王室血统,C中根本就不会去搞个这么样的类型,只有char,没你string说话的份,所有的字符串,都用字符数组来存储。到了C++,让它攀上点关系,为了让那些不懂内存的人满足一下(就像我刚学C++的时候那样),算有个大家都认识的库函数吧。没想到到了C#,这个老外竟然进大雅之堂了。虽然这种小人,放了进来也搞不了太大的作为,但我不知道它在内存中用了多少空间,哪些是浪费的,哪些是确实用上的,心里总是觉得不爽,好像有了垃圾回收机制的保护伞它就可以进来乱搞内存似的。

  

    诸如种种,不一而举,C#中很多东西还没有了解到。。。

    这只是工作上需要,在最近两天才开始学的,幸好没让我学Java,虽然C#比C++多了很多废话,但是也算是C的血统,可以勉强接受。终究这东西能立足也有一定的依据,可以让人对于内存更弱化,而去关心业务逻辑,这东西对于上面老板来说,很重要,老板可不会关心你用C++中内存的运作。

    Anyway,慢慢认识这个C的孙子吧

委托具有以下特点:

  • 委托类似于 C++ 函数指针,但它们是类型安全的。

  • 委托允许将方法作为参数进行传递。

  • 委托可用于定义回调方法。

  • 委托可以链接在一起;例如,可以对一个事件调用多个方法。