方法隐藏(new)
隐藏(方法):基类方法不做申明(默认为非虚方法),在派生类中使用new声明此方法的隐藏。隐藏时,访问父类则调用父类的方法,访问子类则调用子类的方法。
示例:
- namespace 隐藏
- {
- class Program
- {
- static voidMain(string[] args)
- {
- ClassNew CN =new ClassNew();
- CN.SetName("new");
- BaseClass BC =CN;
- BC.SetName("基类");
- }
- //基类
- public classBaseClass
- {
- public voidSetName(string name)
- {
- Console.WriteLine("基类:我的名字是" + name);
- }
- }
- //派生类
- public classClassNew : BaseClass
- {
- //这里如果不使用new,将生成警告!
- new publicvoid SetName(string name)
- {
- Console.WriteLine("new:我的名字是" + name);
- }
- }
- }
- }
运行结果:new:我的名字是new
基类:我的名字是基类
如果上述扔不好理解,我们再举一个隐藏静态变量的例子
- namespace 隐藏继承成员
- {
- class Program
- {
- public classBaseClass
- {
- public static int A = 123;
- }
- public classClassNew : BaseClass
- {
- new public static int A = 456;
- static voidMain(string[] args)
- {
- Console.WriteLine(A);
- }
- }
- }
- }
运行结果:456
注:不仅有方法隐藏,还有其他的,通过继承隐藏名称一般采用下列形式之一:
1.引入类或结构中的常数、指定、属性或类型隐藏具有相同名称的所有基类成员。
2.引入类或结构中的方法隐藏基类中具有相同名称的属性、字段和类型。同时也隐藏具有相同签名的所有基类方法。
3.引入类或结构中的索引器将隐藏具有相同名称的所有基类索引器。
4.在同一成员上同时使用 new 和 override 是错误的。
另外,在不隐藏继承成员的声明中使用 new 修饰符将生成警告。在隐藏继承成员的生命中不使用new修饰符也将产生警告