隐式& # 39;这个# 39;不能引用Xamarin中的扩展方法

本文关键字:扩展 方法 Xamarin 不能 这个 隐式 引用 | 更新日期: 2023-09-27 18:18:52

我创建了一个自定义扩展方法,以便在代码中更容易地向视图添加约束。现在当我想用它的时候,我不能让它工作。我导入了扩展所在的名称空间,并尝试使用隐式this调用它(因此没有指定它),并且它不起作用。

所以我有这样的东西:

public static class ExtensionMethods {
    public static void Constrain(this UIView view, /*parameters with some defaults*/)
    {
        view.AddConstraint( /*the same parameters*/ );
    }
}
public class MyCustomView: UIView
{
    public MyCustomView()
    {
        Constrain(/*parameters*/);
    }
}

这不起作用。然后我在Constrain方法调用之前添加了this.,它的工作原理如下:

public static class ExtensionMethods {
    public static void Constrain(this UIView view, /*parameters with some defaults*/)
    {
        view.AddConstraint( /*the same parameters*/ );
    }
}
public class MyCustomView: UIView
{
    public MyCustomView()
    {
        this.Constrain(/*parameters*/);
    }
}

这是Xamarin c#实现中的一个缺陷,还是应该是这样的(如果是,为什么?)?

隐式& # 39;这个# 39;不能引用Xamarin中的扩展方法

这根本不是允许的语法的一部分。

调用扩展方法的语法在c#规范第7.6.5.2节-扩展方法调用中指定,如下所示:

7.6.5.2扩展方法调用
在 形式之一的方法调用(§7.5.5.1)中
expr . identifier ( )
expr . identifier ( args )
expr . identifier < typeargs > ( )
expr . identifier < typeargs > ( args )

如果调用的正常处理没有找到适用的方法,则尝试将该构造作为扩展方法调用处理。如果expr或任何参数的编译时类型是动态的,则扩展方法将不适用。

你可以看到合法的形式涉及到expr.,当你调用在同一类型中声明的方法时,这是不存在的。