2011-04-15 38 views
0

我创建了一个的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"); 
     } 
    } 
} 

我然后把一个import语句我的aspx页面上

<%@ Import Namespace="G3Site" %> 

我可以调用测试( )通过这个方法就好了:

<% this.Test(); %> 

但是,当我试图把它称为不参考这个

<% Test(); %> 

我得到一个编译错误:

CS0103: The name 'Test' does not exist in the current context 

任何人都不会有为什么发生这种情况,是有办法解决它的任何想法?

回答

0

C#编译器要求每个C#语言规范(见第7.6.5.2节)的扩展方法被称为“关闭”表达式(例如变量或对象的引用)。

0

这不只是一个的ASP.Net MVC视图的限制,这是在C#扩展方法一般规则:

public class SomeClass 
{ 
    public void Method() 
    { 
     ExtensionMethod(); 
    } 
} 

public static class Extensions 
{ 
    public static void ExtensionMethod(this SomeClass sc) { } 
} 

这不会编译,如C#编译器需要扩展方法来被称为使用一个实例。为什么这个决定是这样的,可能是因为一些角落案件只有埃里克利珀特可以梦想:)

+0

http://stackoverflow.com/questions/3510964/why-is-the-this-keyword-required-to-呼叫的延伸法从 - 内最前/ 3513036#3513036 – 2011-04-16 06:42:17