A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© squilla 中级黑马   /  2014-2-13 16:27  /  1397 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

C# 重写和重载的区别?

5 个回复

倒序浏览
说重写一般都是只重写父类的virtual虚方法,是多态的体现.重载是指直接覆盖父类的正常的函数,这样其实会造成一些问题.
回复 使用道具 举报
记得重载是同一个函数名不同的参数要求时按所提供的参数来调用不同的函数。
比如
fun();
fun(1);
fun(1,2);
fun("1");
这样,就可能会调用四个不同的名为fun的函数。
回复 使用道具 举报
重载提供了对一个方法签名的不同参数调用的实现。覆写提供了子类中改变父类方法行为的实现。

评分

参与人数 1技术分 +1 收起 理由
电脑大牛 + 1

查看全部评分

回复 使用道具 举报
关于方法的重载:指的是在同一个类中,同样的方法,有不同的实现方式。
其写法:同一个类中的同名方法,但是参数列表必须不一样。所谓的参数列表不一样,是指参数的个数、类型、顺序,至少其中之一不一样。
关于方法的重写,指的是在父类定义了的方法,由子类自己用自己的实现方式来实现。其写法,有着严格的要求:方法名、参数列表、返回类型都要相同。访问修饰符、抛出的异常类型,向上兼容。
计算机在找寻方法时,根据的是方法名和方法的参数列表。所以,方法的重写,内存里面,是子类的这个方法覆盖了父类定义的这个方法。
重写的官方描述是:允许同一父类的不同子类有相同的行为,但具体的实现方式不一样。

评分

参与人数 1技术分 +2 收起 理由
电脑大牛 + 2

查看全部评分

回复 使用道具 举报
方法名称相同但是方法的参数个数或参数类型不同或返回值不同就是重载
  1.   //无返回值无参方法
  2.         public void count()
  3.         {

  4.         }

  5.         //方法名相同,参数相同,返回值不同的重载方法
  6.         public int count()
  7.         {
  8.             return 0;
  9.         }

  10.         //方法名相同,参数个数不同的重载方法
  11.         public int count(int num1,int num2)
  12.         {
  13.             return num1+num2;
  14.         }

  15.         //方法名相同,参数类型不同的重载方法
  16.         public double count(double num1, double num2)
  17.         {
  18.             return num1 + num2;
  19.         }
复制代码


重写就是指在父类中定义了一个抽象方法或虚方法,在子类中又使用override重新实现该方法就叫做重写
  1.   //定义Person类,该类拥有一个抽象的Say方法,和一个虚方法Run
  2.     public abstract class Person
  3.     {
  4.   
  5.         //父类定义抽象的Say方法
  6.         public abstract void Say();

  7.         //父类定义虚方法Run
  8.         public virtual void Run()
  9.         {
  10.             Console.WriteLine("人们正在走路!");
  11.         }
  12.     }
复制代码
  1. //定义Teacher类,继承Person类
  2.     public class Teacher : Person
  3.     {
  4.         //使用override 重写父类的抽象的Say方法
  5.         public override void Say()
  6.         {
  7.             Console.WriteLine("我是一名老师,我在给学生们上课");
  8.         }

  9.         //使用override 重写父类的虚方法
  10.         public override void Run()
  11.         {
  12.             Console.WriteLine("我是学生我正在跑步");
  13.         }

  14.     }
复制代码

评分

参与人数 1技术分 +3 收起 理由
电脑大牛 + 3

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马