在ViewPage上调用扩展方法有问题
本文关键字:方法 有问题 扩展 调用 ViewPage | 更新日期: 2023-09-27 17:50:10
我为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" %>
我可以通过this调用Test()方法:
<% this.Test(); %>
但是当我试图调用它而不引用时,这个:
<% Test(); %>
我得到一个编译错误:
CS0103: The name 'Test' does not exist in the current context
有没有人知道为什么会发生这种情况,有没有办法解决?
根据c#语言规范(第7.6.5.2节),c#编译器要求将表达式(例如变量或对象引用)的扩展方法称为'off'。
这不仅仅是ASP的限制。这是c#中扩展方法的一般规则:
public class SomeClass
{
public void Method()
{
ExtensionMethod();
}
}
public static class Extensions
{
public static void ExtensionMethod(this SomeClass sc) { }
}
将无法编译,因为c#编译器要求使用实例调用扩展方法。为什么这个决定是这样的,可能是因为一些只有Eric Lippert才能想到的角落案例:)