• C#中如果类的扩展方法和类本身的方法签名相同,那么会优先调用类本身的方法


    新建一个.NET Core项目,假如我们有如下代码:

    using System;
    
    namespace MethodOverload
    {
    
        static class DemoExtension
        {
            public static int GetNumber(this Demo d,int i)
            {
                Console.WriteLine("DemoExtension GetNumber was called!");
                return i;
            }
        }
    
    
        class Demo
        {
            public int GetNumber(int i)
            {
                Console.WriteLine("Demo GetNumber was called!");
                return i;
            }
        }
    
    
        class Program
        {
            static void Main(string[] args)
            {
                Demo demo = new Demo();
    
                demo.GetNumber(100);
    
                Console.WriteLine("Press any key to end...");
                Console.ReadLine();
            }
        }
    }

    我们可以在VisualStudio中看到demo.GetNumber方法有一个重载:

    一个是Demo类中定义的GetNumber方法,还有个是DemoExtension类中定义的GetNumber扩展方法,那么我们在调用demo.GetNumber(100)时,到底调用的哪个方法呢?

    执行结果如下:

    可以看到是Demo类中定义的GetNumber方法被调用了,所以如果说有扩展方法和类本身的方法签名相同,C#会优先调用类本身的方法。

    假如现在我们注释掉Demo类中定义的GetNumber方法:

    using System;
    
    namespace MethodOverload
    {
    
        static class DemoExtension
        {
            public static int GetNumber(this Demo d,int i)
            {
                Console.WriteLine("DemoExtension GetNumber was called!");
                return i;
            }
        }
    
    
        class Demo
        {
            //public int GetNumber(int i)
            //{
            //    Console.WriteLine("Demo GetNumber was called!");
            //    return i;
            //}
        }
    
    
        class Program
        {
            static void Main(string[] args)
            {
                Demo demo = new Demo();
    
                demo.GetNumber(100);
    
                Console.WriteLine("Press any key to end...");
                Console.ReadLine();
            }
        }
    }

    现在执行结果如下:

    这次我们看到调用的就是DemoExtension类中定义的GetNumber扩展方法了

  • 相关阅读:
    Jmeter4.0压测实战
    tomcat只部署一个index.html 文件
    redis 查看当前连接数
    公众号入口-H5测试要点
    windows 下启动redis && Python 操作 redis
    Jmeter4.0之beanshell引用外部jar
    算法练习之存在重复元素
    python 递归查找jpg文件并打印
    hadoop单节点安装
    windows 下获取文件夹下的文件名称
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/9805348.html
Copyright © 2020-2023  润新知