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 Dictionary<int, A> _dictClass = new Dictionary<int, 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。

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

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

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

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

01-20 04:55