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

  • 相关阅读:
    python链接Hive
    input type=file输入框
    JQ剪辑图片插件,适用于移动端和PC端
    随笔
    Js获取当前日期时间及其它操作
    SQL中like语句的索引使用
    MS SQLSERVER 数据库表存储结构
    Jdom 解析 XML
    sqlserver 查询时,datetime的相关函数
    xml转换String输出
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/9805348.html
Copyright © 2011-2022 走看看