C#里面的五种访问权限修饰符
- public,是公开的,对类和类成员有效,没有访问成员的级别限制
- private,是私有的,对类成员有效,只能在类的内部使用
- internal,是内部的,对类和类成员有效,访问仅限于程序集中(程序集:编程生成的.exe结尾的应用程序)
- protected,是受保护的,对类成员有效,只能在该类和该类的派生类中使用,而不管该派生类和基类是否在同一个程序集中
- protected internal,受保护的内部,如果是继承关系,无论是不是在同一个程序集里都可以访问;如果不是继承关系,只能在同一个程序集中访问
堆和栈的区别
堆:是无序的,由一片不连续的内存域构成。一般由程序员进行分配和释放,用new、malloc等分配内存函数分配得到的就是在堆上,如果忘记释放的话,当内存达到一定的特定值时,会通过GC自动进行回收。
栈:是有序的,要保持着先进后出的原则,由一片连续的内存域构成。通常由编译器自动分配和释放,函数体中定义的变量通常在栈上,栈内存无需我们管理,也不受GC管理,当栈元素使用完毕会立马释放。
GC工作原理
C#的GC采用的是标记清除原理,算法分为“标记”和“清除”两个阶段,首先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象,统一回收所有未被标记的对象。
形参和实参
形参:在函数定义中出现的参数可以看作一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参
实参:在函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参
值传递和引用传递区别
值传递:传递时,首先为被调用方法的形参分配内存空间,并将实参的值按位置一一对应地复制给形参,此后被调用方法中形参值的改变都不会影响到相应的实参;
引用传递:系统不是将实参本身的值复制后传递给形参,而是将其引用值(即地址值)传递给形参,因此,形参所引用的该地址上的变量与传递的实参相同,方法体内相应形参值的改变都将影响到作为引用传递的实参。
五大对象
- Connection:连接对象。连接数据库,通过ConnectionString 数据库连接字符串,用于指定与哪种数据库进行连接。
- DataAdapter:适配器对象。通过映射Fill方法来填充DataSet对象,通过update方法来更新数据源中的数据,填充或更新完成后自动断开与数据库服务器的连接。
- DataSet:数据集对象。数据表的集合,是DataSet和数据源之间的桥梁,一方面可以通过command对象下达命令后将取得的数据放入DataSet对象中,另一方面可以把用户对DataSet独享做出的更改写入到数据源中。
- Command:命令对象。执行SQL语句对数据源进行操作并返回操作结果,对数据源的操作一般包括查看,插入,更新和删除。
- DataReader:数据流对象。读取数据库,通过Command对象提供从数据库检索数据信息的功能,以一种只读的、向前的、快速的方式访问数据库。