zoukankan      html  css  js  c++  java
  • C# 虚方法 与 隐藏方法(new) 区别

    重写和隐藏的定义:

    重写:继承时发生,在子类中重新定义父类中的方法,子类中的方法和父类的方法是一样的          例如:基类方法声明为virtual(虚方法),派生类中使用override申明此方法的重写.

    隐藏:基类方法不做申明(默认为非虚方法),在派生类中使用new声明此方法的隐藏。

     

    重写(virtaul)时,定义的变量为父类或子类, 赋值为子类时.  皆调用子类的重写方法;(会从子类中查找有重写则调用, 没则调用基类方法)

    隐藏(new)时,定义的变量为父类则调用父类的方法(不管赋值是子类还是父类),定义的变量为子类则调用子类的方法。(使用场景: 当子类想取的一方法名称与父类相同时, 可以使用. 子类的方法与父类的方法相对来说是没有直接的关系(继承,重写==). )

     

    隐藏(new)示例:

    using    System;  
       class    A  
       {  
             public    void    F()    
             {  
                   Console.WriteLine("A.F");    
             }  
       }  
       class    B:    A  
       {  
             new    public    void    F()    
             {    
                   Console.WriteLine("B.F");    
             }  
       }  
       class    Test  
       {  
             static void Main(string[] args)
             {  
                   B    b    =    new    B();  
                   b.F();  
                   A    a    =    b;    
                   a.F();  
             }  
       }  
       输出为  
       B.F  
       A.F  

    重写virtual(虚方法)示例     

    using    System;     

    class    A     

    {           

      public    virtual    void    F() 

          {

                      Console.WriteLine("A.F");

           }

    }     

    class    B:    A     

    {

           public    override    void    F()

           {

                        Console.WriteLine("B.F");

           }     

    }     

    class    Test     

    {           

      static    void    Main()             

       {

                 B    b    =    new    B();                 

        b.F();                 

        A    a    =    b;                   

        a.F();           

      }     

    }     

    输出为      B.F      B.F

     

     

    引用: http://hi.baidu.com/kxw102/item/ccd28cdc57e743e1795daacb

  • 相关阅读:
    计算器算法的简单实现
    [备忘]如何在Asp.net MVC,非Controller中获取当前Request,Session,Response等请求信息
    [Easy UI ]DataGrid 首次进入页面时,不加载任何数据
    使用Hyperv搭建oracle11gR2 RAC过程中遇到问题记录
    Win oracle10g 不同目录rman恢复记录
    ORACLE RAC 日常管理[10g,11g]
    win2008 11gRAC 环境 安装步骤记录 【前期配置简略】
    本地登录和远程登陆总结[oracle ,资料收集于网络]
    Oracle10g RAC 修改IP [转载]
    安装DNS Server linux 【转载】
  • 原文地址:https://www.cnblogs.com/chencidi/p/3224471.html
Copyright © 2011-2022 走看看