面向对象、对象、类(字段、属性、方法、构造函数)、变量作用域、静态成员、实例成员、抽象类、接口等
面向对象:封装 继承 多态
对象:
世间万物皆对象
一切事物都是对象
对象时一个具体的,
对象的组成:一个特征(属性),一个行为(方法)
类:
是抽象的概念,是一种数据类型,引用类型
类是创建对象的模版
类组成:字段、属性、方法、构造函数、事件等
同一个cs文件中可以有多个类
字段的命名:骆驼命名
属性:是一个聪明的字段,封装字段,帕斯卡命名
构造函数:是一种特殊的方法,给类初始化(给类内部的字段初始化),没有返回值,名字必须和类名一致
变量作用域
变量分两种:成员变量、局部变量
成员变量:直接属于某个类,作用域在该类内部
局部变量:声明该变量的块语句或方法结束的封闭括号之前的作用域内
封装
把事物的状态和行为封装在类中
继承
让某个类型的对象获得另一个类型的对象的属性的方法,所有类都直接或间接地继承object类
继承还有个重要的特性:父类对象可以引用子类的实例
private:私有的,只有在当前类中访问
protected:只能在自己及自己的子类中可以访问、
public:对任何类和成员对完全开放,务限制访问
internal:只能在同一应用程序集内使用本类
internal protected:只能做同一应用程序集内通过本类或派生类访问
访问级别约束
子类访问级别不能高于父类
静态成员 实例成员
静态成员属于类所有,非静态成员(实例成员)属于类的实例所有
C#静态方法属于类所有,类实例化前即可使用
在静态方法中不可以直接调用实例方法
在实例方法中可以 直接调用静态方法
静态方法和静态变量创建后始终使用同一块内存(静态存储区),实例成员会创建多个内存空间
多态
多态就是指不同对象收到相同消息时,会产生不同行为,同一类在不同场合下表现出不同的行为特征
多态的作用:把不同的子类对象都当做父类来看,可以屏蔽不同子类之间的差异,写出通用的代码,做出通用的编程,以适应不断变化的需求。
抽象类
抽象类定义的是公共的实现和能力
抽象类不能别实例化
抽象类为子类提供所需要的成员
抽象类中的成员既可以有实现也可以无实现
抽象类必须由其子类实现它的抽象成员(除非子类也是抽象类)
一个类只能继承一个抽象类(类的单根继承性)
虚方法
虚方法可以给父类提供一种默认的实现
子类可以使用override重写虚方法
虚方法不能出现在密封类(sealed)中
虚方法和抽象方法的区别
虚方法必须有实现,抽象方法不能有实现
抽象方法只能出现在抽象类中
抽象方法必须被子类重写(override),除非子类也是抽象类
接口
接口是定义一种能力,定义类的一组标准和规范,规定子类能干什么和抽象类有些相似,结局类的单根继承,接口可以实现多重继承
子类
接口中的成员必须不能有实现
接口中的成员不能有访问修饰符,隐式公开
接口中可以有属性、方法、索引器等,但不能有字段
接口中的所有成员必须被子类中全部实现
接口污染,一个接口之做一件事
接口和抽象类
抽象类中可以有实现,而接口中不能有实现
抽象类和接口都不能被实例化
接口的成员在子类中直接实现,抽象类中的抽象成员要重写 override
什么时候使用抽象类,什么时候使用接口
抽象类主要用于关系密切的对象,而接口适合为不相关的类提供通用功能
飞机会飞,鸟会飞,他们都实现了同一个接口“飞”,但是F22属于飞机抽象类,各自属于鸟抽象类
函数返回值(函数参数前的修饰符)
params 可变参数,必须出现在参数列表的最后
ref 仅仅是一个地址,引用传递,可以把值传递强制改为引用传递
out 让函数可以输出多个值
ref 必须先初始化,因为是引用,所以必须先“有”,才能引用,而out则是内部为外部赋值,所以不需要初始化,而且外部初始化也没用
ref应用场景是内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所
集合
ArrayList,可变长度数组,使用类似与数组,是个杂货铺,什么类型的数值都可以放进去。
Hashtable,键值对集合,key是目录,keyvalue是值,类似与字典
泛型集合
List<T>类似于ArrayList,存储、读取数据时不用装箱、拆箱。
Dictionary<K,V>类似于Hashtable,K、T、V就像一把锁,锁住集合只能存某种特定的类型数据
foreach遍历
移除:Remove、RemoveAt、RemoveRange、Clear。