C#重点整理
面向对象语言的特点:封装 继承 多态。
C# 不允许直接操作内存,去掉了指针。
静态变量:包括常量,与程序有着相同生命周期(英语:Object lifetime)的变量。
变量:
值类型:整数,浮点数,布尔等;在储存在堆栈并中进行分配;直接访问其实例;复制变量时复制变量的值。
引用类型:为主要对象类型数据;储存在堆栈中;必须在托管堆中分配内存;必须使用new关键字创建;在托管堆中分配的每个对象都有与之相关联的附加成员并且这些成员必须被初始化;由垃圾回收机制来管理;多个引用类型变量可以引用同一对象,并且操作互相影响。
值类型直接储存其值,引用类型储存对其值的引用。
值类型在栈中操作,引用类型在堆中分配储存但愿。
栈在编译时就分配好内存空间,在代码中有明确定义。
堆是在程序运行中动态分配内存空间。
值类型总是在内存中占用一个预定义的字节数,引用类型在栈中分配一个内存空间,这个内存空间包含的是对另一个内存位置的引用,这个位置是托管堆中的一个地址。
枚举类型:
枚举类型是一种独特的值类型,用于声明一组具有相同性质的常量;使用枚举可以增加程序的可读性和可维护型,同时可以避免类型错误。
隐式转换:不需要声明就能进行转换,编译器不需要进行检查就能安全转换。
显式转换:强制转换,需要声明。
装箱和拆箱:
装箱:将值类型转换为引用类型;允许将值类型隐式转换成引用类型。
拆箱:将引用类型转换为值类型;允许将引用类型显式转换成值类型。
声明变量:变量名字只能由数字,字母,下划线组成
第一个符号只能是字母和下划线
不能使用关键字
同一语句块内不能重复
变量的作用域:只要字段所属的类在某个作用域内,其字段也在改作用域内。
局部变量存在于表示声明该变量的块语句或者方法结束的封闭花括号之前的作用域内。
在fot,while或类似语句中声明的局部变量存在于该循环体内。
常量:常量就是值固定不变的量,在编译时已经确认。
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与数据源之间的桥梁。