一、里氏替换原则(LSP)
1、原则上子类对象是可以赋值父类对象的,也可以说子类可以替换父类,并且出现在父类能够出现的任何地方,反过来,父类对象是不能替换子类的,这种特性称为里氏替换原则。
2、LSP基本原理
1)当存在继承关系时,声明是父类,则堆中对象保存的类型指针为父类,那么调用的时候,就会执行父类的成员
2)当创建一个子类对象时,声明是父类对象,则只能调用父类方法。声明是子类对象,则先看子类中是否有该方法,没有则父类中寻找,有则调用。
3)里氏替换原则
Father p=new Son();//子类可以隐式的转换为父类
Son z=(Father)p;//父类必须强转为子类
二、类的属性
1、属性的目的就是设置访问与修改成员变量数值的规则
2、属性本质就是 Set_X()与Get_X()方法的简化技术
3、属性的简化写法,就是Set与Get
4、只读属性与只写属性
三、Is与As运算符
1、as关键字含义是转换,但是一旦转换失败后给null值,不会报错
2、两者区别
type A is type B 仅判断A是否为B类型,或者B类型的子类
type A as type B 先判断,再转换
四、结构与类
1、结构体功能:允许用户自定义类型
2、适用范围:适合一些小型的数据结构,这些结构包含的数据以创建后不修改的数据为主。也适合数据打包,一次性定义多个变量。如果需要面向对象的特性,必须用类。成员变量很多的时候,必须用类。
3、结构体使用时,可以New,也可以不New,如果不New,则使用前必须为结构体中所有的成员变量赋值。
4.结构体的限制
1)除非字段声明为const/static,否则无法初始化
2)没有默认的构造函数
3)可以声明带参数的构造函数
4)不能继承
5)在赋值时候进行复制
6)实例化可以不使用New运算符
7)可以实现接口
5、值类型:bool、机构、枚举、均隐式继承System.ValueType
五、字符串与Equals
字符串具有“驻留性”,(恒定性,不变性),即存储空间地址不会变化,操作以后会新增地址。进行字符串增删改的时候,建议使用StringBuilder()方法,先New一个对象,Append()增加,Insert(字符串下标,字符串)插入,Replace()替换,Remove(下标,长度)删除。
字符串的常用方法:
IndexOf() 查找指定字符串,找到会返回字符串下标位置,如果找不到,返回-1
SubString(下标位置,截断长度) 得到子字符串,如果只给下标位置,会从下标位置开始截断至字符串末尾
Split(‘想分隔的字符串’) 截断字符串(返回字符串数组),单引号
Join(“设置的分隔符”,“想加入的字符串”,“想加入的字符串”) 连接字符串(静态方法) 双引号
Format(“字符串{0}字符串{1}”,“字符串”,“字符串”) 格式化字符串(静态方法)
Replace(“旧字符串”,“新字符串”) 替换方法 可用“链式编程”(在Unity中不推荐)
Trim() 剔除字符串两边的空格
string.IsNullOrEmpty(字符串) 判断字符串是否为空 返回真则为空
六、枚举类型
声明关键字:enum
为了更好的识别一个变量的具体含义,且固定变量的适用范围
枚举类型转换Int类型 Convert.toInt32()_,返回的数值为默认下标位置,也可更改赋值(添加“别名”),会自然排序依次累加。
public enum HeroState
{
None,
Walking,
Runing,
Jumping,
Attack,
Hurt,
Dead
}
引用的时候 HeroState hs=HeroState.Attack ,常与Switch共同使用
值类型:基本数据类型,枚举类型(enum),结构类型(struct)
引用类型:类,接口,数组