C#中的 override和new

本文通过实例深入解析了C#中虚函数(virtual)与new关键字的使用区别,阐述了如何通过虚函数实现多态性以及new关键字如何切断与基类方法的继承关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接看代码就知道了。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 虚函数
{
    class Base
    {
        virtual public void outClassName()
        {
            Console.WriteLine( "基类" );
        }

        virtual public void outPut()
        {
            Console.WriteLine("基类");
        }
    }

    class FirstDerived : Base
    {
        override public void outClassName()
        {
            Console.WriteLine("第一个派生类的outClassName方法");
        }

        override public void outPut()
        {
            Console.WriteLine("第一个派生类中的outPut方法");
        }
    }

    class SecondDerived : FirstDerived
    {
        public override void outClassName()
        {
            Console.WriteLine("第二个派生类的outClassName方法");
        }
        new public void outPut()
        {
            Console.WriteLine("第二个派生类中的outPut方法");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            SecondDerived sd = new SecondDerived();
            Base base1 = (Base)sd;
            base1.outPut();//第一个派生类中的outPut方法
            base1.outClassName();//第二个派生类的outClassName方法
        }
    }
}

图解C#中的原话:

当使用对象基类部分的引用调用一个覆写的方法,方法的调用被沿着派生类层次上朔执行,一直到被标记为override的方法的最高派生版本。  这句话的关键词是  沿着派生类层次上朔执行, 直到, 标记为override的方法

也就是说如果是不会上溯到new标记的方法的。

使用new的话,按照我的理解是 ——切断该方法与父类(父类的父类。。。)中同名同标签的方法的联系,因此

 new public void outPut()
        {
            Console.WriteLine("第二个派生类中的outPut方法");
        }

这个方法和父类中的void outPut( )方法没有任何关系了。动态绑定自然轮不到这个方法了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值