zoukankan      html  css  js  c++  java
  • 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扩展方法了

  • 相关阅读:
    1.1、html概述和基本结构
    几个常用的产品原型设计工具
    Redis 3. 与python交互
    Redis 2.2、主从配置
    Redis 2.1、发布订阅
    Redis 1.6、zset
    Redis 1.5、set
    Redis 1.4、list
    php实现手机拍照上传头像功能
    php获取文件mime类型Fileinfo等方法
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/9805348.html
Copyright © 2011-2022 走看看