属性不会存储值,而是由字段保存值,属性的本质是方法
属性后不要加括号,加了就是方法
构造函数必须和类名一致,用来初始化字段值,没有返回值,可以重载,不能被继承,子类可以调用
被继承的类一定要有一个无参的构造函数(如果没有手动指定有参构造函数的话,默认有一个无参的,但写了有参的,就必须手动再写一个无参的)
继承只能继承一个父类
抽象类abstract可以被继承,但不能被实例化
如果一个类中有任何抽象成员,那么这个类也必须是抽象类abstract class
子类继承抽象类后,必须重写父类中的所有抽象成员,除非子类也是一个抽象类
抽象成员在抽象类中不能有任何实现。
抽象类中可以有抽象成员也可以有非抽象成员
Person[] per=new Person[5]是声名,不是实例化
Person p=new Human() p.SayHello()声名的是哪个类,调用的就是哪个方法,除非被重写
()转换和as 转换的区别:如果转换失败()会报异常,而as则会返回null。
接口中不可以用public private修饰,无意义
接口中不可以定义字段,可以定义属性(最终编译为方法),方法
类可以实现多个接口,但只能继承一个父类
通过接口就没法调用类的个性化成员
通过接口的好处就是“统一”
接口之间叫继承,类与接口之间叫实现
接口中可以定义属性,方法,索引器,但不能定义字段,不能加public等修饰符
接口和抽象类在使用方面最主要的区别:
接口是提供公共的行为(能干什么,具体实现由子类实现)
抽象类提供公共的实现(怎么干)
int是object的子类,但int[]不是object[]的子类
Delete 删除表,但标识列数据依然按原顺序
Truncate 删除表,并还原标识列,从头开始
IDbCommand 添加参数 Add
SqlCommand添加参数 Add,AddRange
SqlParameter 最好用三个参数的构造函数,2个的容易出现歧义(把数字当成枚举)
SqlParameter pa=new Sql...
pa.Direction=ParameterDirection.Output;设置参数的输出方向
Object obj=cmd.Parameter[0].Value;取得输出参数
insert into (...) output inserted.字段 values (...)
插入数据,并返回新增的字段值
insert into (...) values (...);select @@IDENTITY
插入数据,并返回新增的自增字段值