首页 > 代码库 > C#基础拾漏(3)
C#基础拾漏(3)
类型强制转换:
只有继承关系才能使用强制转换
is:判断变量是否指定的类型
声明一个父类变量,赋给一个子类变量,用is去判断是否子类对象,返回true
as:进行类型转换,如果转换失败,返回null值,只能用与引用类型,并且与有集成关系的
重写:
对父类的虚方法进行重写,声明一个父类对象赋给一个子类对象,调用方法,执行的是子类的方法,区别与new关键字进行的覆盖。
爷爷类的虚方法,父类重写,子类不重写,声明一个爷爷类的变量赋给一个子类对象,调用虚方法,执行的是父类的方法。调用一个方法时,如过检测到是虚方法,会从赋给的那一级对象的方法表里面开始找,找到了就执行,找不到依次往上找,一直到在本类里面找。
多态:
同一行为不同,对于不同的事物有不同的表现形式
继承是为了多态,多态是为了扩展,
开放封闭原则:对扩展开放,对修改封闭
抽象方法:
抽象方法只能声明在抽象类中
子类必须重写父类的抽象方法,使用override
不能通过base关键字调用父类的抽象方法
抽象方法不能被声明为私有的
抽象类:
抽象类中可以有非抽象成员(属性,字段,方法,索引器)
抽象类中可以有虚方法
Equals方法
object类:比较的是两个对象的引用地址
String类:重写了Object类的Equals方法,参数类型是Object,还另外定义了一个自身的Equals方法,参数类型是String,比较的是字符串的值。
当一个类中有两个同名方法,只是参数类型不同,且两个方法的参数类型还是继承关系,调用方法时,传给一个子类对象,调用的是参数类型为子类的那个方法。
值类型跟string类似,也重新定义了一个参数为相应值类型的Equals方法
接口:
接口可以视作一个特殊的抽象类
成员不能有修饰符,默认是public abstract
只能定义抽象成员,属性,方法,索引器,事件
实现接口无需override
所有的抽象成员都要实现,包括属性。
接口是一种规范
同时继承类和实现接口时,类要写在最前面
接口可以继承接口
接口中成员可以实现为抽象的或虚的
显式实现接口:通过
接口和抽象类:
抽象类的继承要有isa的关系,接口没有这个关系,只是规定实现接口的类具有的能力,或者说行为。
装箱和拆箱:
效率低,尽量避免