C# 中重载 重写 和 覆盖

举报
陈言必行 发表于 2021/08/14 00:49:59 2021/08/14
【摘要】 一、重载   1、重载示意     重载(Overload)是重新加载的意思,指的是同一个类中同名,但是参数列表不同的方法组(返回值不能区别函数是否重载),重载没有关键字。通俗点说重载是对内存中同一个类中的函数或方法进行重新加载的意思。   2、发生条件 &nbsp...
一、重载
  1、重载示意
    重载(Overload)是重新加载的意思,指的是同一个类中同名,但是参数列表不同的方法组(返回值不能区别函数是否重载),重载没有关键字。通俗点说重载是对内存中同一个类中的函数或方法进行重新加载的意思。
  2、发生条件
   必须发生在一个类中,函数名相同,参数类型或者个数不同构成重载,与返回类型无关。
 如:

    
  1. Public class Name
  2. {
  3. Public string GetName(string username)
  4. {
  5. Return username;
  6. }
  7. Public int GetName(int usercount)
  8. {
  9. Return usercount;
  10. }
  11. }



 二、重写
   1、示意
    重写(Override)指子类修改父类中某个函数的函数体,需要重写的父类中的函数必须是由virtual、abstract 或override标注的,不能重写非虚方法或静态方法。
    Override是在继承的时候,如果你写的函数与要继承的函数函数特征(函数特征包括函数名,参数的类型和个数)相同,那么,加上这个关键字,在使用这个子类的这个函数的时候就看不见父类(或超类)的函数了,它被覆盖掉了。
   2、发生条件
    必须发生在基类和派生类中,基类函数必须用virtual、abstract 或override修饰,派生类用override修饰。
   如:

    
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. oc oa=new ob();
  6. oa.b(1, 2); //输出结果为fdfdf
  7. }
  8. public class oc
  9. {
  10. private int a;
  11. //封装
  12. public int geta
  13. {
  14. get { return a; }
  15. }
  16. public int seta
  17. {
  18. set { a = value; }
  19. }
  20. //函数b
  21. public virtual int b(int c, int e)
  22. {
  23. Console.WriteLine("{0}+{1}={2}", c, e, c + e);
  24. return c + e;
  25. }
  26. }
  27. //派生类ob,基类oc
  28. public class ob : oc
  29. {
  30. //重写基类中的函数b
  31. public override int b(int c,int e)
  32. {
  33. Console.WriteLine("fdfdf");
  34. return c;
  35. }
  36. }
  37. }




  三、覆盖
   1、示意
    覆盖指重新定义子类中与父类具有相同函数特征的的函数体。子类中有一函数和父类中函数的函数特征相同,但函数体不同,称为覆盖。这种覆盖又称为隐藏,是隐藏父类中相同的函数,并没有进行重写。
   2、发生条件
   在子类中写一个和基类一样名字(参数不同也算)的非虚函数,会让基类中的函数被隐藏,编译后会提示要求使用New关键字。
如:

    
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. oc oa=new ob();
  6. oa.b(1, 2); //输出结果为1+2=3
  7. }
  8. public class oc
  9. {
  10. private int a;
  11. //封装
  12. public int geta
  13. {
  14. get { return a; }
  15. }
  16. public int seta
  17. {
  18. set { a = value; }
  19. }
  20. //函数b
  21. public int b(int c, int e)
  22. {
  23. Console.WriteLine("{0}+{1}={2}", c, e, c + e);
  24. return c + e;
  25. }
  26. }
  27. //派生类ob,基类oc
  28. public class ob : oc
  29. {
  30. //覆盖,隐藏基类中的函数b
  31. public new int b(int c,int e)
  32. {
  33. Console.WriteLine("fdfdf");
  34. return c;
  35. }
  36. }
  37. }

      重写(Override)的两个函数的函数特征相同,应用在子类和父类中,会重写父类函数;重载(Overload)的两个函数的函数名虽然相同,但函数特征不同,应用在同一类中;覆盖(new)两个函数的函数名一定相同,但函数特征可相同也可不相同,应用在子类和父类中,会隐藏父类同名函数。
   

文章来源: czhenya.blog.csdn.net,作者:陈言必行,版权归原作者所有,如需转载,请联系作者。

原文链接:czhenya.blog.csdn.net/article/details/76092072

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。