Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 继承中存在奇怪的扩展方法问题_C#_Asp.net_Inheritance_Extension Methods - Fatal编程技术网

C# 继承中存在奇怪的扩展方法问题

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,

我正在尝试扩展Page类以添加一些新功能,使某些方法易于使用,因为它们将在ASP.NET中该页面的代码中直接调用,我遇到一个奇怪的错误:

我的方法叫做SetQuery, 如果在Page类中键入SetQuery,则无法识别它是的,我已使用[Namespace];, 如果我键入base.SetQuery,它会在IntelliSense中看到,但不会编译,说明在页面中实际上找不到任何方法或扩展方法, 如果我将其键入Page.SetQuery,它将被识别并工作

尤其是第二种情况对我来说似乎是一个bug,因为IntelliSense将其识别为一种扩展方法,但没有编译

是否有任何“更自然”的方法可以在不使用强制类型转换等的情况下键入SetQuery?

扩展方法总是需要显式的目标对象,因此不可能仅通过MethodName调用扩展方法。我怀疑如果您键入:

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规范;很高兴有这样的澄清