我有两种相同的方法。 一个是
public void ExtendFrameIntoClientArea(Window w, int amount)
{
if (internals.DwmIsCompositionEnabled())
{
WindowInteropHelper wi = new WindowInteropHelper(w);
internals.DwmExtendFrameIntoClientArea(wi.Handle, new internals.MARGINS(amount));
}
}
,另一个是
public void ExtendFrameIntoClientArea(this Window w,int amount)
{
this.ExtendFrameIntoClientArea(w, amount);
}
其中一个是扩展方法,另一个不是。但是,这会导致错误“此调用不明确”
我将如何解决这个问题?
答案 0 :(得分:3)
扩展方法应该是静态的。
public static class XExtender
{
public static void A(this X x)
{
x.A(x);
}
}
public class X
{
public void A(X x)
{
}
}
扩展方法应该有静态类和静态方法。
答案 1 :(得分:1)
根据C# Version 3.0 Specification,search order是:
那么你如何宣告你的方法以及在哪里?
答案 2 :(得分:0)
我认为错误不是由扩展方法引起的。
首先,扩展方法
public static void ExtendFrameIntoClientArea(this Window w, int amount) { }
(顺便说一下,你错过了static
修饰符)与实例方法不一致
public void ExtendFrameIntoClientArea(int amount) { }
在类Window
中声明,但没有使用实例方法
public void ExtendFrameIntoClientArea(Window w, int amount) { }
无论宣布什么职业。进一步 - 据我所知 - 实例方法优先于扩展方法 - 所以它们永远不应该与扩展方法不明确。我建议再次查看错误消息并验证您正在查看正确的方法。