1.4.3.3 隐藏方法

  • 如果签名(参数个数、参数类型、返回类型、方法名)相同的方法在基类中和在基类的派生类中同时出现。但是这个方法在基类中没有virtual关键字,在派生类中没有override关键字,那么派生类就会隐藏基类中的方法。

举个例子:

	public class Postion
    {
        public int X { get; set; }
        public int Y { get; set; }
    }
    public class Shap
    {
        public Postion Postion { get; set; }
    }
    public class Ellipse:Shap
    {
        public void MoveBy(int x,int y)
        {
            Postion.X += x;
            Postion.Y += y;
        }
    }
  • 如果想要扩展基类的功能,并且扩展方法的签名和基类中的一致。这两个方法实现的功能并不同,这个方法可能加virtual也可能不加virtual。那么编译就会给出一个警告:

在这里插入图片描述

using System;

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
           
        }
            
    }
    public class Postion
    {
        public int X { get; set; }
        public int Y { get; set; }
    }
    public class Shap
    {
        public Postion Postion { get; set; }
        public void MoveBy(int x,int y)
        {
            Postion.X =x;
            Postion.Y =y;
        }
    }
    public class Ellipse:Shap
    {
        public void MoveBy(int x,int y)
        {
            Postion.X += x;
            Postion.Y += y;
        }
    }
}
  • 如果基类的MoveBy()方法声明为虚方法,调用时,编译器认为派生类中的方法没有override,所以就将其作为一个独立的方法。那么无论怎么调用用都只会调用基类中的方法·。
  • 如果不能避免这种方法的定义,想要避免编译警告就可以使用new关键字隐藏方法。
    public class Ellipse:Shap
    {
        new public void MoveBy(int x,int y)
        {
            Postion.X += x;
            Postion.Y += y;
        }
    }
  • 如果不使用new关键字,就需要重命名该方法,但是如果在之前该方法被其他地方调用了,重命名就行不通了。如果和基类的方法实现的功能一样,那么就可以override他。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值