我为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语句
<%@ Import Namespace="G3Site" %>
我可以通过这个调用Test()方法就好了:
<% this.Test(); %>
但是当我尝试在不参考这个:
的情况下调用它<% Test(); %>
我收到编译错误:
CS0103: The name 'Test' does not exist in the current context
有没有人知道为什么会发生这种情况并且有办法吗?
答案 0 :(得分:0)
C#编译器要求根据C#语言规范(第7.6.5.2节)将扩展方法称为表达式(例如变量或对象引用)的“off”。
答案 1 :(得分:0)
这不仅仅是对ASP.Net MVC视图的限制,这是C#中扩展方法的一般规则:
public class SomeClass
{
public void Method()
{
ExtensionMethod();
}
}
public static class Extensions
{
public static void ExtensionMethod(this SomeClass sc) { }
}
这不会编译,因为C#编译器需要使用实例调用扩展方法。为什么这个决定是这样的,可能是因为只有Eric Lippert才能想到的一些极端情况:)