C#的语法总结(第一版)

这个总结是对于我自己的,不是对于整个C#的。当然多多少少也还是受到了我看的《C#高级编程》的影响。如果有建议,请不吝留言吧!

一写发现自己好无知,我还是先整理纸质的笔记再说其它的……好羞。

1、变量类型

个人的感觉是对于不管是C++还是C#,在.NET平台下,它的预定义变量类型差不多都是一个样子。按书上的讲法就是来自CTS(Common Type System)。总共15个,13个值类,2个引用(string和object)。

(1)值:sbyte(这个在C里面没有)short,int,long,byte(这个C也没有),ushort,uint,ulong,float,double,decimal(这个C也没有),bool,char

和C++.NET一样,可以在赋值的时候加上标识符(可能不是这么叫):无符号用U,长整用L,单精度用F,decimal用M。大小写不分。

这个可能听上去没有用,应该什么用。不过字面值1234被编译器默认为int,虽然他也可以是uint等等其它类型。另外小数默认是double。就算这么说起来也觉得用处不是很大,也许是为了var来定义的时候有用吧。

所说的值类就是定义了以后,值是存在栈(stack)上的,而引用地址在栈上而实际的内容则是在堆(heap)上。如果要用到托管,其实也就是一个垃圾管理器吧。就要用new来声明,会在托管堆上给分配内存,不管是值类还是引用。

(2)string就是字符了,这是一个封闭(sealed)类。object是几乎所有对象的蕨类(base),反正我现在接触到的类最终都是派生于object。类的话,有四个部分,方法(methord)、字段(field),属性(property),事件(event)组成。

方法就是实现功能的函数。有三种来源方式,一种是自己编;一种是来自蕨类;一种是来自接口。第三种可能有点牵强,不过接口在C#,或者在.NET中真的相当重要,因为毕竟C#也是一个封闭好的语言吧。.NET提供的接口可以让你只要轻松的实现了接口的函数,具体怎么完成就不用自己操心了。我感触比较深的就是当你的类继承了IFormatable这个接口后,调用WriteLine会先找你类中的ToString重载。还有就是不管是直接还是间接继承了IEnumarable这个接口,就可以用foreach这个函数。另外有个地方要注意的是如果是托管的话是不会有内存泄漏的,但是这样就不能用指针了,因为内存地址是在变的。但是可以用unsafe关键字来定义一个范围来用指针(在编译器里面也必须允许才行)。而类的内存释放在C#里面不是即时的,如果用析构函数要完成其它功能是不行的,时间上不能把握。可以用IDisposable这个接口。

字段就是以前学习C++的数据成员,而属性就像是一个访问器,可以在set和get里面可以设置更多的规则。其实感觉就是在方便了设置对字段的访问。

事件的话是对一个什么还不是很了解,现在只是知道可以通过事件订阅来让几个类协调起来。

另外,在vs2012中,有object view可以搜索,比较方便新手。

2继承

类只能继承一个,接口可以多个。结构也是值类,只能默认继承,不能自己改(也算是不能继承吧)。

比较新的东西:用new来显式隐藏,overide重写,this,base关键字,

不太知道虚方法和抽象方法有什么区别,都是必须重写。

3、泛型

这个就是之前的模板吧,反正功能上是没有什么不同。但是比较模板,写起来代码少了好多,和正常的类相比就是多了个尖括号。

4、重载

和C++差不多。

5、委托之类

委托就是一个函数指针,泛型委托可以实现接口一样的功能。就是一个客户程序可以处理不同的对象,只要它们实现了同一个接口。lambda实际上是建立了一个匿名的委托,非常容易写简单的函数。

6字符串

现在知道,string类只合适表示结果,如果是要对字符串进行处理还是用stringbuilder。另外可以用unix-like里面支持的正则表达式,不过现在只知道用match,也就是从已有的字符串中找想要的。也许还有更好的用处。

7集合。

我想……知道了列表、序列、栈、链表、字典、位数组、并发集合。其本质还是实现了那些接口。

8、LINQ

用同一语言访问不同数据源。

9、动态扩展

不懂

10、反射

不懂

11、异常

try catch finally ,应用系统自带的异常和自己做自己要的异常。

 

posted @ 2013-01-03 16:28  请淡忘我  阅读(220)  评论(0编辑  收藏  举报