相关疑难解决方法(0)

为什么从扩展类中调用扩展方法需要'this'关键字

我已经为ASP.NET MVC ViewPage创建了一个扩展方法,例如:

public static class ViewExtensions
{
    public static string Method<T>(this ViewPage<T> page) where T : class
    {
        return "something";
    }
}
Run Code Online (Sandbox Code Playgroud)

从View(派生自ViewPage)中调用此方法时,我得到错误" CS0103:当前上下文中不存在名称'Method' "除非我使用this关键字来调用它:

<%: Method() %> <!-- gives error CS0103 -->
<%: this.Method() %> <!-- works -->
Run Code Online (Sandbox Code Playgroud)

为什么this需要关键字?或者没有它可以工作,但我错过了什么?

(我认为这个问题肯定有重复,但我找不到一个)

更新:

正如Ben Robinson所说,调用扩展方法的语法只是编译器糖.那为什么编译器不能自动检查当前类型的基类型的扩展方法而不需要this关键字?

c# extension-methods

75
推荐指数
3
解决办法
1万
查看次数

标签 统计

c# ×1

extension-methods ×1