C# 方法屏蔽,方法重写,方法密闭

原文链接来自:面试一点通:http://www.msedt.com/infoflow/details/1094


1. 方法屏蔽

class Pet
    {
        public void Run()
        {
            Console.WriteLine("pet walk");
        }
    }
    
    class Dog : Pet
    {
        new public void Run()
        {
            Console.WriteLine("dog walk");
        }
    }

以如下方式调用Run方法

Dog dog = new Dog(); 
dog.Run();

得到的结果是dog walk

以如下方式调用Run方法

Pet dog = new Dog(); 
dog.Run();

得到的结果却是pet walk

2. 方法重写

class Pet
    {
        virtual public void Run()
        {
            Console.WriteLine("pet walk");
        }
    }
    
    class Dog : Pet
    {
        override public void Run()
        {
            Console.WriteLine("dog walk");
        }
    }

以如下方式调用Run方法

Dog dog = new Dog(); 
dog.Run();

得到的结果是dog walk

以如下方式调用Run方法

Pet dog = new Dog(); 
dog.Run();

得到的结果还是dog walk

3. 方法密闭

  1. 基类中的方法密闭

如果一个基类不希望子类对它的某个非抽象方法进行重写,只要在这个方法前面不添加virtual 就可以。因为派生类要重写基类的方法,这个方法必须是 virtual | override | abstract。由于是非抽象方法,排除 abstract。由于是基类中的方法,排除 override。因此,只要基类中的非抽象方法不添加 virtual,派生类就无法对其进行重写。

  1. 派生类中的方法密闭

只需要在 被重写的方法前添加 sealed 关键字。注意,在密闭某个派生类方法上 sealed 只能和 override 结合使用,不能单独使用。也就是说只能对重写的派生方法进行密封。

class Pet
    {
        virtual public void Run()
        {
            Console.WriteLine("pet walk");
        }
    }
    
    class Dog : Pet
    {
        sealed override public void Run()
        {
            Console.WriteLine("dog walk");
        }
    }

度一切苦厄,破一切迷惑。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值