C#中隐藏(new)和方法重载(overide)区别

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

namespace NewOveride
{
    class Program
    {
        /*
            重写和隐藏的定义:
            重写:基类方法声明为virtual(虚方法),派生类中使用override申明此方法的重写.
            隐藏:基类方法不做申明(默认为非虚方法),在派生类中使用new声明此方法的隐藏。
            
            自己的理解:
            比如父类A,有个方法标记为virtual,a(){}子类B继承A,也声明一个方法a(){}  
            如果B里面的a()使用override,那么访问A的方法时实际上调用了B里面声明的方法,相当于A的方法被覆盖了,new就不是,
            访问A的a还是A里面定义的方法,访问B就是B里面定义的方法.
            说白了:new是覆盖,override是重载,“覆盖”并不意味着“删除”,但“重载”意味着“删除”,
            这就是“覆盖”和“重载”的区别 
            隐藏(new)示例:
         */
        static void Main(string[] args)
        {
            B b = new B();
            b.ClassA();
            A a = b;
            a.ClassA();

            Console.WriteLine("\n");

            B2 b2 = new B2();
            b2.ClassA2();
            A2 a2 = b2;
            a2.ClassA2();

            Console.ReadKey();
        }
    }

    //
    class A
    {
        public void ClassA()
        {
            Console.WriteLine("A.ClassA()");
        }
    }
    class B : A
    {
        new public void ClassA()
        {
            Console.WriteLine("B.ClassA()");
        }

    }

    //
    class A2
    {
        public virtual void ClassA2()
        {
            Console.WriteLine("A2.ClassA2()");
        }
    }
    class B2 : A2
    {
        public override void ClassA2()
        {
            Console.WriteLine("B2.ClassA2()");
        }
    }


}

2011052316291539.jpg

转载于:https://www.cnblogs.com/xiangshu/articles/2054436.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值