C#继承overload与override

2021-02-02 00:28

阅读:669

标签:override   http   write   pre   oid   image   ictclas   继承   stat   

namespace ConsoleApp1
{

    public class A 
    {

        public void P() {
            Console.WriteLine("这里是A的PP哦!");
        }
        public void P(int a) { }
        public void P(bool a) { }
        public void P(int a, int b) { }

    }

    public class B : A
    {

        public new void P()
        {
            Console.WriteLine("这是B的PP!");
        }

    }
}
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            _dictClass.Add(0, new A());
            _dictClass.Add(1, new B());

            _dictClass[0].P();
            _dictClass[1].P();
            (_dictClass[1] as B).P();

        }
        private static Dictionaryint, A> _dictClass = new Dictionaryint, A>();
    }

}

技术图片

首先解释下override与overload

翻译过来叫做重写和重载,笔者看来,二者的区别在两个方面表现的十分明显,首先是代码书写的区域,重载在一个类里面,重写则是子类对父类进行的重写,然后是表现优先级的不同,重写的表现优先级要高于被重写的对象,也就是说优先表现重写后的那个方法

namespace ConsoleApp1
{

    public class A 
    {

        public virtual void P() {
            Console.WriteLine("这里是A的PP哦!");
        }
        public void P(int a) { }
        public void P(bool a) { }
        public void P(int a, int b) { }

    }

    public class B : A
    {

        public override void P()
        {
            Console.WriteLine("这是B的PP!");
        }

    }
}

对代码稍微做下更改,输出结果:

技术图片

重写的P优先级明显高于被重写的P。

注意:当深层次继承时,重写表现出来的总是最后一次被重写那个。

然后继续说重载,这里笔者总结了下,方法的类型无论如何,只要方法名字相同,它就是一个方法,重载直接影响的是方法里面的参数,看看百科的定义

“重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。”

技术图片

再看看代码提示,不难实验,或者自己试一下。

C#继承overload与override

标签:override   http   write   pre   oid   image   ictclas   继承   stat   

原文地址:https://www.cnblogs.com/fairy-blonde/p/11567297.html


评论


亲,登录后才可以留言!