微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

问题在ViewPage上调用扩展方法

如何解决问题在ViewPage上调用扩展方法

| 我为ViewPage创建了以下扩展方法
using System.Web.Mvc;

namespace G3Site {
    public static class ViewPage_Extensions {
        public static void Test(this ViewPage vp) {
            vp.Writer.Write(\"this is a test\");
        }
    }
}
然后,我在aspx页面上放置导入语句
<%@ Import Namespace=\"G3Site\" %>
我可以通过这样很好地调用Test()方法
<% this.test(); %>
但是,当我尝试调用它而不参考以下内容时:
<% test(); %>
我收到编译器错误
CS0103: The name \'Test\' does not exist in the current context
有谁知道为什么会这样,并且有办法解决吗?     

解决方法

根据C#语言规范(第7.6.5.2节),C#编译器要求将扩展方法称为表达式的“ off”(例如变量或对对象的引用)。     ,这不仅是ASP.Net MVC视图的限制,这是C#中扩展方法的一般规则:
public class SomeClass
{
    public void Method()
    {
        ExtensionMethod();
    }
}

public static class Extensions
{
    public static void ExtensionMethod(this SomeClass sc) { }
}
这不会编译,因为C#编译器要求使用实例调用扩展方法。为何如此决定,可能是由于某些极端的情况,只有埃里克·利珀特才可以梦想     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。