C#面向对象 - 子类隐藏父类的方法

当子类与父类拥有完全一样的方法时,称子类“隐藏”了父类的同名方法。

如果子类中某个方法与父类方法完全一样(即方法名和方法参数都一样),假设父类变量引用一个子类对象,那么通过父类变量访问此方法,访问到的是子类还是父类所定义到的方法?

 

Public class Parent{

    Public void HideF(){

        Console.WriteLine(“Parent.HideF()”);

    }

}

 

Public class Child:Parent{

    Public void HideF(){

        Console.WriteLine(“Child.HideF()”);

    }

}

 

// 输出

Parent par = new Child();

par.HideF(); // Parent.HideF()

 

当分别位于父类和子类的两个方法完全一样时,调用哪个方法由对象变量的编译时类型决定。

 

如果确实希望调用的是子类的方法,应先进行强制类型转换

((Child)par).HideF();

 

回过头来再看看parent和Child类,vs在编译这两个类是会发出一个警告:

警告1: “HideExamples.Child.HideF()” 隐藏了继承的成员

            “HideExamples.Child.HideF()”如果是有意隐藏,请使用关键字new

 

当然上述警告并不影响程序运行结果,却告诉我们代码不符合C#的语法规范,修改Child类的代码以消除上述警告:

Public class Child:Parent{

    Public new void HideF(){

        Console.WriteLine(“Child.HideF()”);

    }

}

New关键字明确告诉C#编辑器:子类会隐藏父类的同名方法,并提供自己的新版本。

由于子类隐藏了父类的同名方法,所以如果要在子类方法的实现代码中调用父类被隐藏的同名方法,请使用base关键字,示例代码如下:

Public class Child:Parent{

    Public new void HideF(){

        Console.WriteLine(“Child.HideF()”);

        base.HideF(); // 调用父类被隐藏的方法

    }

}

 

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值