C# 中重载 重写 和 覆盖

一、重载
  1、重载示意
    重载(Overload)是重新加载的意思,指的是同一个类中同名,但是参数列表不同的方法组(返回值不能区别函数是否重载),重载没有关键字。通俗点说重载是对内存中同一个类中的函数或方法进行重新加载的意思。
  2、发生条件
   必须发生在一个类中,函数名相同,参数类型或者个数不同构成重载,与返回类型无关。
 如:
Public class Name  
{  
    Public string GetName(string username)  
    {  
        Return username;  
    }  
Public int GetName(int usercount)  
    {  
        Return usercount;  
    }  
}  



 二、重写
   1、示意
    重写(Override)指子类修改父类中某个函数的函数体,需要重写的父类中的函数必须是由virtual、abstract 或override标注的,不能重写非虚方法或静态方法。
    Override是在继承的时候,如果你写的函数与要继承的函数函数特征(函数特征包括函数名,参数的类型和个数)相同,那么,加上这个关键字,在使用这个子类的这个函数的时候就看不见父类(或超类)的函数了,它被覆盖掉了。
   2、发生条件
    必须发生在基类和派生类中,基类函数必须用virtual、abstract 或override修饰,派生类用override修饰。
   如:
 class Program  
    {  
       static void Main(string[] args)  
        {  
            oc oa=new ob();  
            oa.b(1, 2);   //输出结果为fdfdf  
        }  
        public class oc  
        {  
            private int a;  
          //封装  
            public int geta  
            {  
                get { return a; }  
            }  
            public int seta  
            {  
                set { a = value; }  
            }  
         //函数b  
            public virtual int b(int c, int e)  
            {  
                Console.WriteLine("{0}+{1}={2}", c, e, c + e);  
                return c + e;  
            }  
        }  
        //派生类ob,基类oc  
        public class ob : oc  
        {  
        //重写基类中的函数b  
            public override int b(int c,int e)  
            {  
                Console.WriteLine("fdfdf");  
                return c;  
            }   
        }  
}  




  三、覆盖
   1、示意
    覆盖指重新定义子类中与父类具有相同函数特征的的函数体。子类中有一函数和父类中函数的函数特征相同,但函数体不同,称为覆盖。这种覆盖又称为隐藏,是隐藏父类中相同的函数,并没有进行重写。
   2、发生条件
   在子类中写一个和基类一样名字(参数不同也算)的非虚函数,会让基类中的函数被隐藏,编译后会提示要求使用New关键字。
如:
 class Program  
    {  
        static void Main(string[] args)  
        {  
            oc oa=new ob();  
            oa.b(1, 2);  //输出结果为1+2=3  
        }  
        public class oc  
        {  
            private int a;  
        //封装  
            public int geta  
            {  
                get { return a; }  
            }  
            public int seta  
            {  
                set { a = value; }  
            }  
        //函数b  
           public int b(int c, int e)  
            {  
                Console.WriteLine("{0}+{1}={2}", c, e, c + e);  
                return c + e;  
            }  
        }  
    //派生类ob,基类oc  
        public class ob : oc  
        {  
         //覆盖,隐藏基类中的函数b  
            public new int b(int c,int e)  
            {  
                Console.WriteLine("fdfdf");  
                return c;  
            }   
        }  
}  

      重写(Override)的两个函数的函数特征相同,应用在子类和父类中,会重写父类函数;重载(Overload)的两个函数的函数名虽然相同,但函数特征不同,应用在同一类中;覆盖(new)两个函数的函数名一定相同,但函数特征可相同也可不相同,应用在子类和父类中,会隐藏父类同名函数。
   
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈言必行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值