zoukankan      html  css  js  c++  java
  • c#中,类的重写中,new和override的区别

    在c#中有两种方法可以重写类的成员函数,分别是**new**和**override**,看书时书上并没有说明两者的区别,经过网上查资料后,总结如下:

    如果使用的是override,则调用的是它实际类的函数,而用的是new的话,调用的是可以被转换为其引用类的函数

    参考网址点击这里

    
    A类 有方法 public virtual void test() 
    B类继承自A类,有方法 public new void test() 
    如下实例化:
    A a = new B(); 
    a.test();
    
    下面是override的情况:
    A a = new A(); 
    B b = new B();
    A a1=new B();
    a.Test();//调用A中Test();
    b.Test();//调用B中Test();
    a1.Test();//调用B中Test();系统会自动识别a1是B的实例
    ((A)b).Test();//与上面相同
    
    下面是new的情况:
    A a = new A(); 
    B b = new B();
    A a1=new B();
    a.Test();//调用A中Test();
    b.Test();//调用B中Test();
    a1.Test();//调用A中Test();
    ((A)b).Test();//与上面相同
    

    深究其原因,为何两者不同,是因为原理不同。
    override是覆盖,即将基类的方法直接抹去重新写,而new只是将基类方法隐藏起来,故而仍旧可以调用基类方法,当然也可用base直接访问,但事实上即便用override的话,也能在用base直接访问基类的方法,因为抹去,只是在派生类里面抹去了,并没有改变其对基类方法的访问权限。



    欢迎大家加入QQ群一起交流讨论,「吟游」程序人生——YinyouPoet

  • 相关阅读:
    linux正则表达式
    linux监控值free命令详解
    loadrunner 中数组的定义
    管线工具sed和正则表达式
    web_link()参数化
    mysql执行插入时性能优化
    linux关闭防火墙
    linux系统中变量和环境变量
    mysql源码安装与基本优化配置
    Memory Consistency Erros
  • 原文地址:https://www.cnblogs.com/yinyoupoet/p/13287600.html
Copyright © 2011-2022 走看看