被迫开始学c#

最近俺们这有个c#的比赛,被同事言语讥讽,报名和那些搞c#开发的一起去比赛。没办法,只能看一看c#了。得分垫底岂不是丢人显眼。而且不仅是丢我的脸,还是丢整个运维人的脸。另外,似乎比赛只比语言细节,框架熟练度还有一些软件工程的知识,不涉及算法和数据结构。让人感觉很绝望。前两个不用说,肯定比不上天天搞这些东西的,软件工程我更是一窍不通。看过人月神话,说来说去好像只有一个观点,要想软件搞得好,只有一招就是招聘天才程序员。什么制度和方法都是胡扯的。

现在国内的大部分搞开发的似乎只重视这些玩意,让整个行业变得越来越民工化。一点都没有高科技的感觉。


c#刚开始看了一部分,把c#和我经常用的python和上学时候学过一点的c,c++做些比较。还是有些异同之处的。


首先,c#最特别的地方是没有全局变量,所有的变量和函数定义都在类里面,包括Main函数。也许是为了体现其面向对象的纯粹性。另外,程序入口可以通过调整编译选项来修改。


namespace是c#一个比较重要的概念,比c++的namespace更具封闭性,比python的作用域更灵活一点。不管怎么来说,显式的作用域对于程序员来说还是非常重要的。传统的c语言,最让人恶心的地方就是到处找类型定义和宏定义。有了namespace,结构就清晰多了。


数据类型方面,和c几乎差不多。类型比较齐全,很大程度上免去了自己typedef的麻烦。强制类型转换似乎不支持宽数据转窄数据。比c要安全很多。c++的强制类型转换的几个方式想不起来,只记得比较复杂,不提了。


c#除了支持经典的c风格循环以外,还支持foreach迭代。让人倍感亲切


顺序和分支功能就不提了,是个语言都差不多。


函数方面,c#比c要灵活。out和ref关键字可以把局部变量的变化传导到函数外部。另一方面也实现了返回多个值的功能。c只能用指针,容易把自己给搞懵。


对于OOP功能,c#和c++比较接近。尤其在封装方面,比python好很多。python要想做似有属性只能把名字前加个__。但是实际上只是给换了个名字而已,换个名字还能引用,根本起不到封装的作用。不过话说回来,要想自己黑自己的程序,怎么封装都是能够访问的。大不了指针用地址+偏移直接访问了。

而且python没有protect的功能。

另外,c# 中有sealed关键字可以防止类被继承。还是挺特别的。

c#的oop结构有数据,属性和方法。

c#的数据等同于python的属性,而c#的属性就是Python中的描述符。至少我一直是这么叫的。

c#的构造函数可以向实现多态的方式来定义不同的构造函数。

c#有个interface的特性,似乎是从java来的。因为c#不支持多重继承,接口就起到了其他纯虚基类的作用。但是实际上远不只如此。C#通过interface可以实现python中魔术方法的功能。比如迭代器和生成器。这真是比较cool的功能。


c#对泛型容器的支持和c++的模板比较类似。重载操作符的方式还没看到。似乎可以支持类似python的动态类型。


目前只看了这么多。瞧了一下,还有不少内容没看。

1.结构化异常,看起来和c++很像。

2.多线程肯定是比python好的,python的多线程太垃圾了。轻量级的协程不知道有没有。毕竟大多数的需求只是异步,而不是并发。如果要,纯粹的并发计算,smp这点cpu数真不够看。

3.反射和自省肯定有,不知道做到什么程度。闭包大概也有。另外,c#有托管的概念,用来做回调。比c的指针要安全,但是肯定是不如python这么优雅。


另外,简单写了几个程序。感觉visualstdio的动态语法检查实在是太好用了,能够快速矫正我的语法错误。让从来只用文本编辑器的我感觉自己像一只土鳖。

你可能感兴趣的:(c#初学者)