zoukankan      html  css  js  c++  java
  • 屏蔽基类原有的方法

    目前,基类的所有公开的数据成员与成员函数,以及所有protected的数据成员与成员函数都会被子类一一继承。但会不会有时候要把基类的一些接口给屏蔽掉呢?好像是没什么具体实例,但了解一下也是可以的。
    查网络上的一些方法,一般是方法重写,里面什么内部都没有。这样说来,也只是基类如果执行该方法,编译器是不会报错的,只是没有任何语句在里面执行而已。方法重写时,基类方法要标为virtual,子类的方法标为override,这样即可。
    using System;

    static class m
    {
     static void Main()
     {
      rectpoint rp=new rectpoint(12, 15);
      rp.show();  //编译通过,但没有代码可执行
      rp.showxy();
     }
    }

    class point
    {
     protected int m_x;
     protected int m_y;

     public virtual void show()
     {
       Console.WriteLine("x=" + m_x.ToString() + " y=" + m_y.ToString());
     }
    }

    class rectpoint:point
    {
     public rectpoint(int x0, int y0)
     {
      m_x=x0;
      m_y=y0;
     }

     public override void show() {}
     
     public void showxy()
     {
      Console.WriteLine("(x, y)=(" + m_x.ToString() + ", " + m_x.ToString() + ")");
     }
    }
    另一种方法,是使用new关键字。这种写法在父类中不必写virtual。而且,这一种方法可以在想调用父类对应方法时,还有机会调用:
    using System;

    static class m
    {
     static void Main()
     {
      rectpoint rp=new rectpoint(12, 15);
      rp.show();  //编译通过,但没有代码可执行
      rp.showxy();
      ((point)rp).show();  //调用父类的方法
     }
    }

    class point
    {
     protected int m_x;
     protected int m_y;

     public void show()
     {
       Console.WriteLine("x=" + m_x.ToString() + " y=" + m_y.ToString());
     }
    }

    class rectpoint:point
    {
     public rectpoint(int x0, int y0)
     {
      m_x=x0;
      m_y=y0;
     }

     public new void show() {}
     
     public void showxy()
     {
      Console.WriteLine("(x, y)=(" + m_x.ToString() + ", " + m_x.ToString() + ")");
     }
    }
    别人说的一种应用情况是这样的:甲先创建父类,乙从父类继承出子类,然后加了一个特别好的功能show,过了一段时间,甲发现show真的很有必要,于是就在父类中加入show,这样,世界就乱了,乙的代码必须重写,至少要把show改为override。如果使用new,则避免这种问题的发生,父类再怎么加同名方法,子类都不会受影响。所以只要是增加父类没有的方法,就应该用new来说明。但我实际测试时,编译器会提出一个警告:p.cs(37,18): warning CS0109: 成员“rectpoint.showxy()”不会隐藏继承的成员。不需要关键字 new。这多少让人会感到不爽。

    不过我还没找到能够在IDE中把父类的方法不显示的办法。(vb中有Shadows,MSIL有hidebysig)

  • 相关阅读:
    标签最低高度设置minheight不兼容
    字体综合属性(font)写法顺序为
    让IE6、IE7、IE8支持CSS3的圆角、阴影样式
    微信小程序3D轮播图
    微信小程序左滑删除
    android ble 蓝牙4.0开发日志(四)
    Windows邮件服务器hMailServer,网页前端访问平台Webmail搭建
    邮件服务器hMailServer管理工具hMailServer Administrator汉化
    蓝牙设计
    Windows下搭建免费、开源的邮件服务器hMailServer
  • 原文地址:https://www.cnblogs.com/yzx99/p/1209776.html
Copyright © 2011-2022 走看看