using关键字
1. 作为指令用在命名空间里。using system
2.为命名空间或类型创建别名。using 别名 = 命名空间.类型
当同一个cs引用2个不同的命名空间,但两个命名空间中包含了相同的类型时使用
3.作为语句使用。using(资源) 使用资源
//using语句之前声明对象
TextWriter tw = new TextWriter();//声明资源
using(tw) //using语句
tw.writeLine("Long Long years ago.....");
//using语句之中声明对象
using(Font font = new Font("Arial", 10.0f)){
//使用font
}
//using语句中声明并使用多个对象并且为同一类型时
using(Font font = new Font("Arial", 10.0f), font2 = new Font("Arial", 10.0f)){
//使用font和font2
}
//using语句中声明并使用多个对象并且为不同类型时
using(IDisposable font = new Font("Arial", 10.0f), tw = new TextWriter()){
//使用font和tw
}
使用规则:
1.using只能使用实现了IDisposable接口的类型,否则会出现编译错误
2.只适用单个非托管资源的情况,如果是多个非托管资源,当内层using发生错误时,将不能释放外层using资源
弊端:
1.虽然这种形式也能确保对资源的使用结束后总是调用Dispose方法,
但他不能防止在using语句已经释放了它的非托管之后使用该资源,导致了不一致的状态
因此他提供了较少的保护,不推荐使用
OverLoad和Override的区别
1.OverLoad重载。方法名相同,参数不同,与返回值类型无关
2.Override重写。出现于子类继承父类的方法中,方法名和参数和父类完全相同。
当通过子类创建实例来调用这个方法时,将会调用子类的方法。相当于把父类的方法完全覆盖掉了,这也是面向对象多态的 一种表现。
子类的访问权限只能比父类的访问权限更大,不能更小。当一个方法在父类中是private时,子类中写入和父类相同名称及参数的方法,不存在重写即覆盖关系。因为private声明的方法只在当前类中可以被访问,因此,子类的这个方法相当于重新创建了一个新的方法。
构造器(构造方法)construct,不能被继承,因此不可以被重写。
数据库聚合函数
avg(列)、count(列)、count(*)、max(列)、min(列)、sum(列)
count(列):列值的计数,忽略空值 count(*):计数,包含空值
char和varchar和nvarchar的区别
1.char(n):索引效率极高,不管存储的数据是否到达了n个字节,都要去占用n个字节的空间,不足的话用空格填充,因此读取的时候需要用到trim()
2.varchar(n):长度为n个可变长度字节,非Unicode字符数据。存储大小为输入字节的实际长度。
3.nvarchar(n):包含n个可变长度字符,为Unicode字符数据。存储大小为输入字符的两倍。
如果包含特殊字符和中文,建议使用nvarchar。
字符集
Unicode:英文也是用2个字节,标点1个字节,汉字和标点都是2个字节,
ASCII:英文1个字节,汉字2个字节
UTF-8:英文1个字节,汉字3个字节
UTF-16:英文字母字符和汉字字符都是2个字节
UTF-32:所有字符都需要4个字节