1.析构方法
格式: ~类名(){ };
没有返回值
没有参数列表
不能重载
没有访问修饰符
垃圾回收机制会自动调用 不能手动调用
析构方法只能定义在类里,一个类只有一个析构方法
析构方法在继承中顺序执行:先派生类 再父类
如果不在一个类中 从后往前执行析构方法
2.匿名类型
根据赋的初值自动推导变量类型
必须要赋初始值 否则系统无法推导
变量类型一经确定 就不允许改变
3.密封
C#允许使用sealed关键字来修饰类和方法
当修饰类的时候表示该类不允许被继承
当sealed修饰方法的时候表示该方法不能派生类被重写,但是可以被派生类覆盖(隐藏 new).
用法:派生类可以通过sealed阻止被继承,内部方法通过sealed可以阻止被重写。
对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承。
还可以在重写基类中的虚方法或虚属性的方法或属性上使用 sealed 修饰符。
(不是重写的方法不能密封)
4.多态 (提高代码的维护性和拓展性 不是很理解...)
同一操作,作用不同对象有不同的实现
里氏转换
原则一:子类对象可以直接赋值给父类对象
Person p = new Student();
当父类指针指向子类实例对象的时候
调用虚方法执行的是派生类里面重写之后的方法
调用隐藏方法执行的是基类里面的原方法
里氏转换的作用:消除不同子类之间类型的差异,把其类型转换成统一的数据类型,这样就可以写出一套通用的代码,也就是可以最大限度的重用代码,同时也提高了程序开发的效率。
原则二:父类可以转换成子类,这样就可以调用子类里面的公有成员了
as 关键字
将父类指针转向实际类型
转换之后无论是调用虚方法还是隐藏方法,最终执行的都是派生类里面的方法
Student s = p as Student;
多态的好处:
1.把不同子类对象都当做父类来看,屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
2.提高代码的维护和可扩展性。
is 关键字
判断一个对象是否是指定的类型,是的话返回true 不是的话返回false
用一个bool 值变量来接收
先判断Student 是否是 Person类型 如果是就强制转换,否则就不转换
如果不判断转化不成功系统会报错
Person person = new Person(); Student student = new Student();
bool flag = student is person;
If (flag) { Person per = (Person)student; }