C#学习笔记
1. 值类型和引用类型:
a. 值类型:
包括:元类型(short、int、long、bool、char等)、用户自定义结构(struct)或枚举类型(enum)。
数据存储在内存中的堆栈中,每个变量或程序都有自己的堆栈,不可以共用一个堆栈地址。
当数据一个值类型的变量传递到另一个相同类型的变量时,会在堆栈中分配两个不同的地址。
(这意味着,两个变量存储的对象毫不相干,任意改变其中一个存储的对象都不会影响到另一个变量存储的对象)
b. 引用类型:
包括:类(包括string),数组,接口和委托。
数据存储在内存中的堆中,可以不同的变量或程序共同使用同一个位置的数据。
当数据从一个引用类型的变量传递到另一相同类型的变量时,只是把该变量的引用地址传给新变量,同时引用当前堆中存储的数据。
(这意味着,改变其中一个引用的对象同时也会影响到另一个变量引用的对象)
2. class和struct:
同:结构可以实现接口,并且可以具有与类相同的成员类型。
异:结构为值类型而不是引用类型,并且结构不支持继承。
3. const与readonly:
a. const 字段只能在该字段的声明中初始化,readonly 字段可以在声明或构造函数中初始化。
因此,根据所使用的构造函数,readonly 字段可能具有不同的值。
b. const 字段是编译时常数,而readonly 字段可用于运行时常数。
c. const 默认就是静态的,而readonly 如果设置成静态的就必须显示声明。
d. const 对于引用类型的常数,可能的值只能是string 和null。
4. override与重载:
a. override修饰符,覆写一个基类中的方法,此方法始终只有一个被你使用的方法。
b. 重载则是将将同名方法重新写过,达到同名的函数实现不同的功能。
5. 虚函数与接口:
a. 多态的种类有两种,一为基类继承多态,二为接口继承多态。
b. 虚函数的使用实现的是基类继承多态,从设计模式的角度来说基类继承体系描述的是Is-A的问题。
c. 接口继承多态是通过继承(更确切的说是“实现”)接口而产生继承体系的。从设计模式的角度来说接口继承体系描述的是Is-Like-A(或者叫Can-do)的问题。
6. DataReader和DataSet:
a. DataReader使用时始终占用SqlConnection,在线操作数据库。任何对SqlConnection的操作都会引发DataReader的异常。DataReader每次只在内存中加载一条数据,并且是只进读取的,因此占用的内存很小,此性能较高。
b. DataSet则是将数据一次性加载在内存中,抛弃数据库连接。读取完毕即放弃数据库连接。因为DataSet将数据全部加载在内存中,所以比较消耗内存,但是确比DataReader要灵活,可以动态的添加行,列,数据.对数据库进行回传更新操作,
a. 值类型:
包括:元类型(short、int、long、bool、char等)、用户自定义结构(struct)或枚举类型(enum)。
数据存储在内存中的堆栈中,每个变量或程序都有自己的堆栈,不可以共用一个堆栈地址。
当数据一个值类型的变量传递到另一个相同类型的变量时,会在堆栈中分配两个不同的地址。
(这意味着,两个变量存储的对象毫不相干,任意改变其中一个存储的对象都不会影响到另一个变量存储的对象)
b. 引用类型:
包括:类(包括string),数组,接口和委托。
数据存储在内存中的堆中,可以不同的变量或程序共同使用同一个位置的数据。
当数据从一个引用类型的变量传递到另一相同类型的变量时,只是把该变量的引用地址传给新变量,同时引用当前堆中存储的数据。
(这意味着,改变其中一个引用的对象同时也会影响到另一个变量引用的对象)
2. class和struct:
同:结构可以实现接口,并且可以具有与类相同的成员类型。
异:结构为值类型而不是引用类型,并且结构不支持继承。
3. const与readonly:
a. const 字段只能在该字段的声明中初始化,readonly 字段可以在声明或构造函数中初始化。
因此,根据所使用的构造函数,readonly 字段可能具有不同的值。
b. const 字段是编译时常数,而readonly 字段可用于运行时常数。
c. const 默认就是静态的,而readonly 如果设置成静态的就必须显示声明。
d. const 对于引用类型的常数,可能的值只能是string 和null。
4. override与重载:
a. override修饰符,覆写一个基类中的方法,此方法始终只有一个被你使用的方法。
b. 重载则是将将同名方法重新写过,达到同名的函数实现不同的功能。
5. 虚函数与接口:
a. 多态的种类有两种,一为基类继承多态,二为接口继承多态。
b. 虚函数的使用实现的是基类继承多态,从设计模式的角度来说基类继承体系描述的是Is-A的问题。
c. 接口继承多态是通过继承(更确切的说是“实现”)接口而产生继承体系的。从设计模式的角度来说接口继承体系描述的是Is-Like-A(或者叫Can-do)的问题。
6. DataReader和DataSet:
a. DataReader使用时始终占用SqlConnection,在线操作数据库。任何对SqlConnection的操作都会引发DataReader的异常。DataReader每次只在内存中加载一条数据,并且是只进读取的,因此占用的内存很小,此性能较高。
b. DataSet则是将数据一次性加载在内存中,抛弃数据库连接。读取完毕即放弃数据库连接。因为DataSet将数据全部加载在内存中,所以比较消耗内存,但是确比DataReader要灵活,可以动态的添加行,列,数据.对数据库进行回传更新操作,