【c#】重写和重载

初次看到这两个名词,感觉它们两个有着千丝万缕的联系似的,不过仔细一研究,发现它们的差异还是很大的。

通俗点说,重写就是改头换面,重新做人;重载就是给它加了个兄弟。

  

下面对比介绍一下重写和重载。

 

重写的规则:

1.在不同类中(有继承关系的类之间,一般用于派生类)。

2. 重写与被重写方法的相同点:参数列表、返回值、抛出异常,方法名   。  

3.重写与被重写方法的不同点:重写方法的访问修饰符>被重写的访问修饰符(public>package>protected>private);   方法体不同。

4.重写的基方法必须是virtual、abstract或override,不能重写非虚方法或静态方法。

 

override和new区别:

new声明的方法,子类调用,运行子类的函数,而如果类型是基类,被隐藏的基类函数就会被调用。

子类函数使用override,用子类的类型来调用,会运行子类的函数,类是基类的时候,仍会调用子类的函数。

 

举例:

(源自C#重载和重写的区别

 

 

public abstract class BaseClass//定义一个抽象的虚类
    {
        public abstract void ShowInfo();//定义虚方法
        public virtual void OutInfo()//定义抽象方法
        {
            Console.WriteLine("这是基类的虚方法!");
        }
    }

    public class SonClass : BaseClass//实现抽象基类BaseClass
    {
        public override void ShowInfo()//重写基类的抽象方法
        {
            Console.WriteLine("重写基类的抽象方法");
        }
        public override void OutInfo()//重写基类的虚方法
        {
            Console.WriteLine("重写基类的虚方法");
        }
    }

 

 

 

 

 

重载的规则:

1.在同一个类中  

2.方法名必须相同  

3.参数列表不能相同,返回值可以相同可以不同      

4.任何一个父类的函数在其一个子类中只能被重写一次。

 

 

举例:

 

   class BillPayment
    {
        void PayBill(int telephoneNumber)
        {
            //此方法用于支付固定电话费
        }
        void PayBill(long consumerNumber)
        {
            //此方法用于支付电费
        }

        void PayBill(long consumerNumber, double amount)
        {
            //此方法用于支付移动电话话费
        }
    }

 

 

 

 

 

感受:

貌似相同,就要找不同点,为了留下深刻的印象;貌似不同,就要找相同点,减少知识量。生活就是学习,学习来源于生活。对学习的知识有一个感性的认识,感性的认识很容易让人接受,铭记,然后通过实践去理解理论,进行总结,最后创新是我们的终极目标。

 

 

PS:2015年8月17日

为什么用重写:

  子类可以对父类的方法进行重写,让自己拥有父类的属性,方法更加的灵活,实现了多态。

为什么用重载:

  方法重载可以再不改变原来方法的基础上,新增功能。提供了函数可扩展的能力。

 

重写和重载对比:

  作用域:重写(父类与子类),重载(方法之间)

  特点:重写(方法名相同) ,重载(方法名相同,参数不同)

  

 

 

 

 

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值