分享是一种生活态度,求知,求真,分享工作,分享生活!

C#重载和重写(override)区分

编程 iqianyue 1535次浏览 0个评论 扫描二维码

定义

重载:在同一定义域内(比如一个类里面)。方法名相同,参数个数、次序、类型不同。因此载对返回值没有要求,可以相同,也可以不同。但是如果方法名相同,参数个数、次序、类型都相同,而返回值不同,则无法构成重载。

重写:继承时发生,在子类中重写定义父类中的方法,子类中的方法和父类中的方法是一样的。即方法名、参数的个数、次序、类型和返回值都相同。例如父类方法声明为virtual(虚方法),子类中使用override申明此方法的重写。

示例

重载:

我们建立一个猫类,在这个类中构造两个方法。一个是带参数姓名的方法,另一个是不带参数姓名的方法。这样当我们初始化一个“猫”的对象时,就可以选择给对象起名或者不起名。从而达到扩展的目的。

4

重写:

比如动物都有“叫”的方法。猫和狗是它的子类,猫的叫声是“喵”,狗的叫声是“汪”,如何在子类中重写父类的方法呢?首先在动物类中构造一个虚方法。

 

1

  public virtual   string  Shout()//注意修饰符中增加了一个virtual,它表示此方法是虚方法,可以被子类重写

在构建猫这个类时,我们重写“叫”这个方法

3

在构建狗这个类时,我们也重写“叫”这个方法

2
重写发生在父类和子类之间,声明的是父类,实例化的是子类。本例子实现了多态。

小结

重载必须发生在一个类中,方法名相同,参数不同。值得注意的是,方法重载必须通过参数不同来判断调用哪个方法,而不能通过返回值。

重写override一般用于接口实现和继承类的方法改写。值得注意的是,被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有进行覆盖。


iqianyue , 版权所有丨如未注明 , 均为原创,转载请注明iqianyue
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论

表情 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址