C# 继承中存在奇怪的扩展方法问题
我正在尝试扩展Page类以添加一些新功能,使某些方法易于使用,因为它们将在ASP.NET中该页面的代码中直接调用,我遇到一个奇怪的错误: 我的方法叫做SetQuery, 如果在Page类中键入SetQuery,则无法识别它是的,我已使用[Namespace];, 如果我键入base.SetQuery,它会在IntelliSense中看到,但不会编译,说明在页面中实际上找不到任何方法或扩展方法, 如果我将其键入Page.SetQuery,它将被识别并工作 尤其是第二种情况对我来说似乎是一个bug,因为IntelliSense将其识别为一种扩展方法,但没有编译 是否有任何“更自然”的方法可以在不使用强制类型转换等的情况下键入SetQuery?扩展方法总是需要显式的目标对象,因此不可能仅通过MethodName调用扩展方法。我怀疑如果您键入:C# 继承中存在奇怪的扩展方法问题,c#,asp.net,inheritance,extension-methods,C#,Asp.net,Inheritance,Extension Methods,我正在尝试扩展Page类以添加一些新功能,使某些方法易于使用,因为它们将在ASP.NET中该页面的代码中直接调用,我遇到一个奇怪的错误: 我的方法叫做SetQuery, 如果在Page类中键入SetQuery,则无法识别它是的,我已使用[Namespace];, 如果我键入base.SetQuery,它会在IntelliSense中看到,但不会编译,说明在页面中实际上找不到任何方法或扩展方法, 如果我将其键入Page.SetQuery,它将被识别并工作 尤其是第二种情况对我来说似乎是一个bug,
this.SetQuery();
它会起作用的。这一点从来没有隐含的含义。使用扩展方法。奇怪但真实
上面解释了为什么SetQuery不起作用;base.SetQuery将不起作用,因为扩展方法是为Page定义的,而不是为基类定义的。此as Page.SetQuery的工作原理与此.SetQuery相同,实际上,由于此as Page显然是正确的,编译器会将其视为不可操作-即,此.SetQuery和此as Page.SetQuery应生成相同的IL,只要实际页面没有更具体的SetQuery方法,显然。,我认为,尽管我一直在使用扩展方法,但我从未在该类中调用过它们。但对我来说,intellisense显示该方法似乎仍然是一个bug,但当我编写它/从intellisense中选择它时,它没有编译,抱怨它没有找到。@可以,是的,这确实像intellisense bug一样-同意Yi:这只适用于C。在VB中,你可以使用隐式this。@Scott谢谢-我不太了解VB规范;很高兴有这样的澄清