【发布时间】:2015-10-23 08:06:03
【问题描述】:
我创建了一个自定义扩展方法,以便在代码中更轻松地向视图添加约束。现在当我想使用它时,我无法让它工作。我导入了扩展所在的命名空间,并尝试使用隐式 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# 实现中的缺陷还是应该是这种方式(如果是,为什么?)?
【问题讨论】:
-
这根本不是调用扩展方法的允许语法的一部分。您必须指定调用扩展方法的对象。我可以想象不支持这一点的部分理由是,如果类本身依赖于这个方法,那么它不应该是一个扩展方法,但显然我不知道他们为什么不选择实现对这个的支持.这在 Xamarin 之外也不受支持,因此这不仅仅是 Xamarin 实现中的一些失误,它只是不合法且允许的 C# 语法的一部分。
标签: c# xamarin xamarin.ios extension-methods