C#入门经典(读书笔记<一>)
一、重载和覆盖的区别:
相同点: 都涉及两个同名的方法。
不同点: 1.类层次 :重载涉及的是同一个类的两个同名方法;.覆盖涉及的是子类的一个方法和父类的一个方法,这两个方法同名。
2.参数和返回值 : 重载的两个方法具有不同的参数,可以有不同返回值类型;覆盖的两个方法具有相同的参数,返回值类型必需相同。
二、方法的隐藏(关键字new)
若覆盖时没有使用virtual和override关键字,则称子类的方法隐藏了父类的方法。
此时编译器报警告。若要消除掉警告,可以使用new修饰符。 C# 会根据引用的类型决定调用哪个类的方法。
关键字new和override的区别:
(1).new修饰的方法表示显式隐藏基类继承的同名方法,不能够用基类的引用访问派生类的new方法。
(2).override表示重写基类的虚方法,可以用基类的引用指向派生类对象来访问派生类的重写方法。
三、密封类(关键字sealed)
C#提供一种不能被继承的类,称为密封类。密封类的声明方法是在类名前加上sealed修饰符。修饰符abstract和sealed不能同时使用。
四、多态
(1)编译时多态——重载;(2)运行时多态——动态绑定(虚函数)
五、参数数组(params)
在不能确定需要传递多少个参数的时候可以使用params关键字指明一个可变的参数数组。
数组参数的类型必须是一维数组,而且必须是形参表中的最后一个参数。
数组参数始终是值传递方式进行传递,不能将params同ref和out组合。(引用参数——ref,输出参数——out)
eg: params int[ ] Nums
六、析构函数
C#支持析构函数。虽然C#能够自动进行垃圾回收,但对于某些资源,.Net不知道如何回收,所以需要人工的内存回收。 在.net 编程环境中,系统的资源分为托管资源和非托管资源。
1、托管资源:如简单的int,string,float,DateTime 等等,是不需要人工干预回收的。
2、非托管资源:例如文件,窗口或网络连接,对于这类资源虽然垃圾回收器可以跟踪封装非托管资源的对象的生存期,但它不了解具体如何清理这些资源。在使用完之后,必须显式的释放他们,否则会占用系统的内存和资源,而且可能会出现意想不到的错误。
(.net 中超过80%的资源都是托管资源。)
(一)、析构函数与Finalize
1、.NET Framework 提供Object.Finalize方法,默认情况下,Finalize 方法不执行任何操作。如果需要可以覆盖Finalize方法。
2、通过析构函数可以自动生成Finalize方法和对基类的Finalize方法的调用。
(二)、非托管资源:Dispose方法


浙公网安备 33010602011771号