C#方法隐藏(new)

方法隐藏(new)

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

示例:  

[csharp]  view plain copy print ?
  1. namespace 隐藏  
  2. {  
  3.     class Program  
  4.     {  
  5.    
  6.         static voidMain(string[] args)  
  7.         {  
  8.             ClassNew CN =new ClassNew();  
  9.            CN.SetName("new");  
  10.    
  11.             BaseClass BC =CN;  
  12.            BC.SetName("基类");  
  13.         }  
  14.                  //基类  
  15.         public classBaseClass  
  16.         {  
  17.             public voidSetName(string name)  
  18.             {  
  19.                Console.WriteLine("基类:我的名字是" + name);  
  20.             }  
  21.         }  
  22. //派生类  
  23.         public classClassNew : BaseClass  
  24.         {  
  25.                           //这里如果不使用new,将生成警告!  
  26.             new publicvoid SetName(string name)  
  27.             {  
  28.                Console.WriteLine("new:我的名字是" + name);  
  29.             }  
  30.         }  
  31.     }  
  32. }  


运行结果:new:我的名字是new

                   基类:我的名字是基类

 

如果上述扔不好理解,我们再举一个隐藏静态变量的例子

 

[csharp]  view plain copy print ?
  1. namespace 隐藏继承成员  
  2. {  
  3.     class Program  
  4.     {  
  5.         public classBaseClass  
  6.         {  
  7.            public static int A = 123;  
  8.         }  
  9.    
  10.         public classClassNew : BaseClass  
  11.         {  
  12.            new public static int A = 456;  
  13.    
  14.             static voidMain(string[] args)  
  15.             {  
  16.                Console.WriteLine(A);  
  17.             }  
  18.    
  19.         }  
  20.     }  
  21. }  


       运行结果:456

 

 

        注:不仅有方法隐藏,还有其他的,通过继承隐藏名称一般采用下列形式之一: 

 

1.引入类或结构中的常数、指定、属性或类型隐藏具有相同名称的所有基类成员。

 

2.引入类或结构中的方法隐藏基类中具有相同名称的属性、字段和类型。同时也隐藏具有相同签名的所有基类方法。

 

3.引入类或结构中的索引器将隐藏具有相同名称的所有基类索引器。

 

4.在同一成员上同时使用 new 和 override 是错误的。

 

         另外,在不隐藏继承成员的声明中使用 new 修饰符将生成警告。在隐藏继承成员的生命中不使用new修饰符也将产生警告


你可能感兴趣的:(.Net基础)