重写、重载

重写、重载


重写:顾名思义,重新写,重载:则不是。  这两个概念很容易混在一块,或者分不清楚。


比如:


public int add(int a, int b){...............}


public int add(int a,int b, int c){..............}


这个就重载,不是重写、


重写是继承派生一章中的概念,重新写继承来的方法!!用的比较多。
举例:
class A
    {
        public string s;


        public void show()
        {
            Console.WriteLine("A");
        }


    }


    class B : A
    {
       public  B()
        {
            Console.WriteLine("B的构造函数");
        }


       public  B(string s)
        {
            this.s = s;
            Console.WriteLine("B的构造函数" + this.s);
        }
 


        public void  show()
        {
            Console.WriteLine("B");
        }
  


    }  //end B




一旦编译,立马提示:B.show()”隐藏了继承的成员“A.show()”。如果是有意隐藏,请使用关键字 new!




因此,可以改成:public new  void show()  ,当然也可以不加!!!  我猜测,之所以C#这样规定,是因为,
C++中有大量的重写,但是给人的感觉不是有意重写, 方便理解吧。


如果在调用时候,这样做:
B b=new B();  A a=(B)b;  a.show();   结果绝对是A,不是B。不要搞错了。。。。。




曾经得出的错误结论: new是用来修饰重写的,而且new可以加,也可以不加!!!       这是不对的,new 在C#中是用来new 实例化对象的,另外是用来隐藏基类的某个方法!!! 也就是说,替代了父类中的那个方法。另外一个关键字,override,它是针对虚函数的。


这样理解,跟没有说一样,而且又说又混乱。


干脆用代码说话,new ,用了之后,父类基类的可以调用父类的方法,而override 则是调用子类的方法。(override是针对虚函数)


借用百度知道的一个回复:

virtual是虚方法,就是等着被重写的,override就是重写后的virtual方法。至于new方法,是父类有这个一样的方法了(同名同参同返回值),但是子类用自己的方法,不用父类的那一套,就new一个,意思是我用我自己的





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值