构造类 - c#枚举方法



调用方法作为扩展方法比直接调用需要更多的参考 (1)

CallerAscel以.NET Framework客户端配置文件为目标,HelperAssembly以“完整”.NET Framework为目标?

我已经遇到了扩展方法(和其他事情)的问题,当我这样做。

我在我将调用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);    
    }
}

我有一个程序集,我将调用CallerAssemblyHelperAssembly的引用。

我的HelperAssemblyOtherAssembly1OtherAssembly2都有引用。

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

当我从CallerAssembly调用我的方法时,一切都很好:

HelperClass.MyHelperMethod(some, other);

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

some.MyHelperMethod(other);

错误表示CallerAssembly需要引用OtherAssembly1OtherAssembly2

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

我不想添加它提示的引用,所以我不会将该调用作为扩展方法。 但是我想了解它们之间的区别。

为什么直接调用该方法可以正常构建,但将其称为扩展方法无法构建?





reference