剪不断理还乱--C#重载/重写/覆盖
在实际的编程中会有很多类、方法、函数等出现同名的情况,造成了程序的可读性差的问题。为了避免这种问题的出现,C#提供了很多机制来区别或修改同名的函数或方法,如:命名空间、类名、重载和覆盖等。这篇博客将会对重载和覆盖进行比较,并通过例子来强化记忆。
一、重载 1、重载示意重载(Overload)是重新加载的意思,指的是同一个类中同名,但是参数列表不同的方法组(返回值不能区别函数是否重载),重载没有关键字。通俗点说重载是对内存中同一个类中的函数或方法进行重新加载的意思。
2、发生条件必须发生在一个类中,函数名相同,参数类型或者顺序不同构成重载,与返回类型无关。
如:
class Program { static void Main(string[] args) { oc oa=new ob(); oa.b(1, 2); //输出结果为1+2=3 } public class oc { private int a; //封装 public int geta { get { return a; } } public int seta { set { a = value; } } //函数b public int b(int c, int e) { Console.WriteLine("{0}+{1}={2}", c, e, c + e); return c + e; } }//派生类ob,基类oc public class ob : oc { //覆盖,隐藏基类中的函数b public new int b(int c,int e) { Console.WriteLine("fdfdf"); return c; } }}
四、总结
重写(Override)的两个函数的函数特征相同,应用在子类和父类中,会重写父类函数;重载(Overload)的两个函数的函数名虽然相同,但函数特征不同,应用在同一类中;覆盖(new)两个函数的函数名一定相同,但函数特征可相同也可不相同,应用在子类和父类中,会隐藏父类同名函数。
它们三者的在使用时还有很多需要注意的地方,在应用中慢慢积累吧,如果有不懂或不对的地方请留言互相交流哦。