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扩展方法了

  • 相关阅读:
    简易聊天客户端程序
    java 多线程使用方法及Socket的使用
    跟着音乐节奏随机的产生不同颜色形状的图形
    移动小圆圈
    在一个frame设置四个组件
    触发按钮改变panel面板上的小圆圈颜色
    借助bootstrap框架模仿airbnb写的网页
    攻击DotCom小游戏
    mit java open course assignment #4
    FPS 游戏实现GDI透视
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/9805348.html
Copyright © 2011-2022 走看看