C#的语法总结(第一版)
2013-01-03 16:28
323 查看
这个总结是对于我自己的,不是对于整个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 ,应用系统自带的异常和自己做自己要的异常。
一写发现自己好无知,我还是先整理纸质的笔记再说其它的……好羞。
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 ,应用系统自带的异常和自己做自己要的异常。
相关文章推荐
- C#经典语法总结(二)属性和字段
- C#学习总结之一基础语法篇
- 总结下遇到的C#新语法
- C#基础语法---运算符(6.25晚上学内容总结)
- 总结c#常用语法,看看还有什么没有写上的哦,快来补上吧
- C#经典语法总结(三)多态
- C#语法问答式总结
- C#语法总结篇---写在开头的部分
- Atitit. c# 语法新特性 c#2.0 3.0 4.0 4.5 5.0 6.0 attilax总结 1. 版本历史 1 1.1. C# 1.0-纯粹的面向对象 2 1.2. C# 2.0
- C# 部分语法总结(入门经典)
- C#经典语法总结(四)嵌套类
- C# 语法之类和结构体的区别(个人总结)
- C#高级语法基础知识总结3——数组
- C#经典语法总结(五)Override 和 New
- 基础知识(C#语法、数据库SQL Server)回顾与总结
- 总结C#语法中八武器(8种方法)
- C#经典语法总结(六)Equals() 和运算符 == 的重载准则
- 总结:C#语法系列——构造函数
- 用于 C# 的 SQL 基本语法总结
- C#语法之---多线程、并发与并行概念总结