C# 重点知识彻底整理(取自C#从入门到精通)

C#重点整理

面向对象语言的特色:封装 继承 多态。web

C# 不容许直接操做内存,去掉了指针。数据库

静态变量:包括常量,与程序有着相同生命周期(英语:Object lifetime)的变量。编程

变量:
值类型:整数,浮点数,布尔等;在储存在堆栈并中进行分配;直接访问其实例;复制变量时复制变量的值。
引用类型:为主要对象类型数据;储存在堆栈中;必须在托管堆中分配内存;必须使用new关键字建立;在托管堆中分配的每一个对象都有与之相关联的附加成员而且这些成员必须被初始化;由垃圾回收机制来管理;多个引用类型变量能够引用同一对象,而且操做互相影响。
值类型直接储存其值,引用类型储存对其值的引用。
值类型在栈中操做,引用类型在堆中分配储存希望。
栈在编译时就分配好内存空间,在代码中有明肯定义。
堆是在程序运行中动态分配内存空间。
值类型老是在内存中占用一个预约义的字节数,引用类型在栈中分配一个内存空间,这个内存空间包含的是对另外一个内存位置的引用,这个位置是托管堆中的一个地址。数组

枚举类型:
枚举类型是一种独特的值类型,用于声明一组具备相同性质的常量;使用枚举能够增长程序的可读性和可维护型,同时能够避免类型错误。安全

隐式转换:不须要声明就能进行转换,编译器不须要进行检查就能安全转换。
显式转换:强制转换,须要声明。服务器

装箱和拆箱:
装箱:将值类型转换为引用类型;容许将值类型隐式转换成引用类型。
拆箱:将引用类型转换为值类型;容许将引用类型显式转换成值类型。svg

声明变量:变量名字只能由数字,字母,下划线组成
第一个符号只能是字母和下划线
不能使用关键字
同一语句块内不能重复函数

变量的做用域:只要字段所属的类在某个做用域内,其字段也在改做用域内。
局部变量存在于表示声明该变量的块语句或者方法结束的封闭花括号以前的做用域内。
在fot,while或相似语句中声明的局部变量存在于该循环体内。ui

常量:常量就是值固定不变的量,在编译时已经确认。指针

Is:检查变量是否为指定类型
?: 条件运算符,根据布尔表达式返回两个值的一个

StringBuilder:可变字符串;可修改字符串并不建立新的String

数组:元素类型,数组的维数,每一个数组的上下限

ArrayList:
数组的容量是固定的,而ArrayList的容量能够自动扩充。
提供添加,删除和插入某一范围的元素的方法。
提供将只读和固定大小包装返回到集合的方法。
只能是一维

哈希表(Hashtable):表示键/值的集合,这些键/值对根据键的哈希代码进行组织。
键不能为空引用,但值能够。

属性:属性是一种用于访问对象或者类的特性的成员,是成员的天然拓展二者都是关联类型的命名成员。
属性有访问器,这些访问器指定在他们的值被读取或写入时须要执行的语句。
属性对于对象的用户显示为字段,对于类的实现者,表示为set(赋值,写)和get(读取,读)。
属性能够向程序中添加元数据。
程序能够使用反射(经过反射,能够在运行时得到程序或程序集中每个类型(包括类、结构、委托、接口和枚举等)的成员和成员的信息)检查本身的元数据。
一般使用属性与COM交互。

静态方法:静态方法不对特定实例进行操做。

非静态方法:对类的某个给定的实例进行操做。

方法的重载:调用同一方法名,但参数不一样。

构造函数:对象的生命周期的开始,建立给定类型的对象时执行发方法类。
与类同名,一般初始化新对象的数据成员。

析构函数:析构函数是以类名加~命名的。
当某个类的实例被认为不在有效,并符合析构条件时,垃圾回收功能会调用该类的析构函数实现垃圾回收。

对象:对象包含变量成员和方法类型。
具备数据,行为和标识的编程结构,是面向对象应用程序的一个组成部分,封装了部分应用程序。
是某一类的具体实例化。

类:是具备相同或类似结构,操做和约束规则的对象组成的集合。

类的封装:不直接存取类中的数据,而是经过方法来存取
目的是加强安全性和简化编程。

类的继承:拥有它继承的类的全部成员。
只能单继承。

Public:基类和子类均可访问,外部也可。
Protected:只有子类可访问。

类的多态:使子类的实例能够直接赋予基类的变量,而后直接经过这个变量调用子类的方法。

接口:接口是一种用来定义程序的协议,描述属于任何类或结构的一组相关行为。
可由方法,属性,时间和索引器或这四种成员类型的任何组合构成。但不能包含字段。
接口相似于抽象类,继承接口的任何飞抽象类型都必须实现接口的全部成员。
不能直接实例化接口。
接口能够包含事件,索引器,方法和属性。
接口不包含方法的实现。
类和结构能够从多个接口继承。
接口自身能够从多个接口继承。

一个类能够继承任意接口。声明实现接口的类时,须要在基类列表中包含所实现的接口的名称。

显式接口:使用接口名称和一个.命名改类成员。

抽象类:抽象类不能直接实例化。
抽象类中能够包含抽象成员,但非抽象类中不能够。
抽象类不能被密封。

抽象方法:抽象方法必须声明在抽象类中。
声明抽象方法时,不能使用virtual,atatic和private

抽象类和接口的区别:他们的派生类只能继承一个基类,即只能直接继承一个抽象类,但能够继承任意多个接口。
抽象类中能够定义成员的实现,但接口中不能够。
抽象类中能够包含字段,构造函数,析构函数,静态成员或者常量等,接口中不能够。
抽象类中的成员能够是私有的(只要他们不是抽象的),受保护的,内部的或者受保护的内部成员(受保护的内部成员只能在应用程序的代码或者派生类访问),但接口中的成员必须是公有的。

密封:不能被(密封类)继承(密封成员)实现。
应密封的类:静态类。
包含安全敏感信息的继承的受保护成员。
继承多个虚成员,而且密封每一个对象开销大于密封整个类。
是一个要求使用反射进行快速搜索的属性。

异常处理:throw(自行主动引起并抛出),try…catch,try…catch…finally

数据链接(ADO.NET)
Connection:链接对象,创建与数据库的链接。
SQL System.Date.SqlClinet
ODBC System.Data.Odbc
OLEDB System.Data.OleDb
Oracle System.Data.OracleClient

String str=”server=服务器地址;database=数据库名;uid=用户名;pwd=密码”;
SqlConnection Conn = new SqlConnection(str);
Conn.Open();

Conn.Close;

Command:执行语句
SqlCommand 向SQL Server数据库发送语句
OleDbCommand 向OLEDB公开的数据库发送语句
OdbcCommand 向ODB公开的数据库发送语句
OracleCommand 用项Oracle数据库发送语句

CommandType:枚举值
StoredProcedure 储存过程的名称
TableDirect 表的名称
Text SQL文本命令

ExecuteNonQuery:执行语句,并返回影响的行数

String str=”server=服务器地址;database=数据库名;uid=用户名;pwd=密码”;
SqlConnection Conn = new SqlConnection(str);
Conn.Open();
SqlCommand cmd = new SqlCommand();
Cmd.Connection = conn;
Cmd.CommandText=”语句”;
Cmd.CommandType=CommandType.Text;

ExecuteReader:执行语句,并生成一个包含数据的SqlDataReader对象的实例。

SqlDataReader sdr = cmd.ExecuteReader();
Sdr.Read()

ExecuteScalar:返回结果集中第一行第一列

DataReader:数据读取器对象,提供只读向前的游标。
SqlDateReader sdr = cmd.ExecuteReader();

SqlDataReader.HasRows:判断是否有值

对于每一个关联的SqlConnection,一次只能打开一个SqlDataReader

DataAdapter:数据适配器对象,是DataSet与数据源之间的桥梁。