【问题标题】:How does .NET know where to look for extension methods?.NET 如何知道在哪里寻找扩展方法?
【发布时间】:2014-05-15 17:00:28
【问题描述】:

我相信我理解扩展方法的概念,除了一个细节。看来您可以在参数上使用this 使用随机static 方法创建一个随机(静态)类。我相信这个参数必须匹配你想要扩展的类的类型(或者它继承自的类)。 一个例子:

public static class MyExtendedMethods
{
    public static int square(this int num)
    {
        int result = 0;
        result = num * num;
        return result;
    }
}

class Program
{
    static void Main(string[] args)
    {
        int myNum = 3;
        myNum = myNum.square();
        Console.WriteLine(myNum);
    }
}

.NET 如何知道在哪里可以找到此类和方法 (MyExtendedMethods.square())?我看不到任何相关的课程。它是否正在查看项目中的所有类以寻找可能的扩展?

【问题讨论】:

  • 静态类必须在可访问的命名空间中。
  • 我只是在这里猜测,但由于 C# 有一个编译器可以在您运行应用程序之前检查所有代码,因此编译器执行某种形式的扩展方法聚合,因此它不必每次都在每个可能的位置查找。因为无论如何它必须遍历所有使用过的代码,所以没有理由不记得你什么时候看到了扩展方法。但这只是一个有根据的猜测,而不是一个知识渊博的答案。
  • @abhitalks 这是一个完全不同的问题......
  • 更正您问题中的术语:this 参数必须与您要扩展的 type 类型相匹配。类型是接口或类。

标签: c# extension-methods


【解决方案1】:

它会在文件顶部声明的命名空间内查找静态类,例如“using System.Linq;” (如果它在当前命名空间中找不到任何东西) 然后它只是将调用替换为

MyExtendedMethods.square

【讨论】:

    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 2010-10-31
    相关资源
    最近更新 更多