作为扩展方法调用方法需要比直接调用它更多的引用

本文关键字:调用 方法 引用 扩展 | 更新日期: 2023-09-27 18:17:00

我有一个扩展方法,我将命名为HelperAssembly,它看起来像这样:

public static class HelperClass
{
    public static void MyHelperMethod(this SomeClass some, OtherClass other)
    {
        // This object is defined in OtherAssembly1
        ObjectFromOtherAssembly1 object1 = new ObjectFromOtherAssembly1(some);
        // This object is defined in OtherAssembly2
        ObjectFromOtherAssembly2 object2 = new ObjectFromOtherAssembly2(other);
        DoStuffWith(object1, object2);    
    }
}

我有一个程序集,我将调用CallerAssembly,它有一个对HelperAssembly的引用。

我的HelperAssembly有对OtherAssembly1OtherAssembly2的引用。

SomeClass和OtherClass都定义在ReferenceAssembly中。HelperAssemblyCallerAssembly有对ReferenceAssembly的引用。

当我像这样从CallerAssembly调用我的方法时,一切都很棒:
HelperClass.MyHelperMethod(some, other);

但是,当我像这样调用它(作为扩展方法)时,我会得到构建错误:

some.MyHelperMethod(other);

错误提示CallerAssembly需要引用OtherAssembly1OtherAssembly2

我很困惑。我认为扩展方法语法只是语法糖,但实际上并没有改变编译的方式。

我不想添加它所建议的引用,所以我不会将调用作为扩展方法。但我想知道区别是什么。

为什么调用方法直接构建良好,但调用它作为一个扩展方法失败构建?

作为扩展方法调用方法需要比直接调用它更多的引用

CallerAssembly针对。net框架客户端配置文件和HelperAssembly针对"完整" .NET框架的任何机会?

当我这样做的时候,我遇到了扩展方法(和其他东西)的问题。