2012-11-15 166 views
0

可能重複:
Why is the ‘this’ keyword required to call an extension method from within the extended class擴展方法需要「this」?

使用Visual Studio 2012

Sitefinity 5. *定義命名空間中的Telerik.Sitefinity.Web.UISystem.Web.UI.MasterPage一些推廣方法。

如果我包括該命名空間一個參考,我可以使用其指示頁面的被正常再現,或由內部搜索引擎的一個特定擴展方法:

using Telerik.Sitefinity.Web.UI; 

namespace MyWebApp 
{ 
    public partial class MyMasterPage : System.Web.UI.MasterPage 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      /// hide common page elements. 
      /// GetIndexRenderMode() returns "Normal" if the page is being rendered 
      /// normally, but not if the search engine is indexing the page. 
      if (this.GetIndexRenderMode() != IndexRenderModes.Normal) 
      { 
       headerPlaceholder.Visible = false; 
       footerPlaceholder.Visible = false; 
       navigationPlaceholder.Visible = false; 
      } 
     } 
    } 
} 

然而,如果刪除thisif(...)語句中,編譯器不再找到擴展方法。

什麼給?我以前從未見過this是必要的情況,除了解決類成員和接口成員或參數之間的歧義之外。

+0

「'此強制性擴展方法?」將是一個更好的標題imho。 –

+1

「this」需要名稱解析。 –

+2

而不是重複整點檢查答案 - http://stackoverflow.com/questions/3510964/why-is-the-this-keyword-required-to-call-an-extension-method-from-within -the-e – Kami

回答

2

每個擴展方法都是某個類的擴展。
您需要該類的一個實例才能使用該擴展。
在你的情況下,擴展名是針對MasterPage的一個實例,並在MasterPage的派生實例中使用它。因此你需要this

+0

我不明白。正態多態規則表示任何對象都是其聲明類型的實例,以及繼承的類型。在祖先中聲明的方法是繼承的。爲什麼這對擴展方法會有所不同,這些擴展方法似乎被注入到JIT的類中,然後像普通方法那樣工作? –