c#之虚方法与隐藏方法的区别

虚方法与隐藏方法定义

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

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

重写virtual(虚方法)示例 : (看方法后面的实例)
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
隐藏(new)示例:(看方法前面的声明)
   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  

你可能感兴趣的:(c#之虚方法与隐藏方法的区别)