2011-04-15 81 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