C#方法重写(override)

重写override

重写:类的继承时发生,在子类中重新定义父类中的方法,子类中的方法和父类的方法是一样的,即方法名,参数,返回值类型都相同。

例如:基类方法声明为virtual(虚方法),派生类中使用override声明此方法的重写.          

重写override一般用于接口实现和继承类的方法改写,要注意:

1、覆盖的方法的标志必须要和被覆盖的方法的名字和参数完全匹配,才能达到覆盖的效果;

2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;

3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;

4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

示例:

[csharp] view plaincopyprint?
namespace 方法重写  
{  
    class Program  
    {     
        static void Main(string[] args)  
        {  
            BaseClass CO = new Class Override();  
            CO.SetName("Override");  
        }  
        //基类  
         public class BaseClass  
        {  
            public virtual void SetName(string name)  //虚方法
            {  
               Console.WriteLine("基类:我的名字是" + name);  
            }  
        }     
        //派生类  
        public class ClassOverride : BaseClass  
        {  
            public override void SetName(string name)  //重写基类中的虚方法
            {  
               Console.WriteLine("Override:我的名字是" + name);  
            }  
        }     
    }  
}
输出:

在方法重写中,我们介绍了虚方法,那么虚方法和抽象方法有什么区别呢? 

1.虚方法(virtual)有一个实现部分可以被子类继承,从而使子类获得和基类相同的方法,另外也为派生类提供了覆盖该方法的选项。相反,抽象方法没有提供实现部分,是一种强制派生类覆盖的方法(否则派生类不能成具体类)

2.(abstract)抽象方法只能在抽象类中声明,(virtual)虚方法不是。

3.(abstract)抽象方法必须在派生类中重写而(virtual)虚方法不必。

4.(abstract)抽象方法不能声明方法实体,虚方法可以。

         个人感觉,方法重载和方法重写都有点像多态,同一个方法的多种形态:执行“相同”的方法,却通过它们自己的实现代码来实现,即同一种方法,不同的对象会产生不同的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值