2012-11-15 3 views
0

가능한 중복 :
Why is the ‘this’ keyword required to call an extension method from within the extended class확장 메서드에 "this"가 필요합니까?

비주얼 스튜디오에게 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; 
      } 
     } 
    } 
} 

단, I는 this 제거하면 : I가 네임 스페이스에 대한 참조를 포함하면

, I는 일반적으로 렌더링하거나 내부 검색 엔진되고있는 페이지를 나타내는 특정 확장 방법을 사용하여 if(...) 문에서 컴파일러는 더 이상 확장 메서드를 찾지 않습니다.

무엇을 제공합니까? 전에는 this이 필요한 경우를 본 적이 없습니다. 단, 클래스 멤버와 인터페이스 멤버 또는 매개 변수 사이의 모호성을 해결할 수 있습니다.

+0

"연장형 메서드에서 필수 항목"이 필요합니까? " 더 나은 표제가 될 것입니다. –

+1

"this"는 이름 확인에 필요합니다. –

+2

오히려 다음 전체 지점 체크를 반복합니다 - http://stackoverflow.com/questions/3510964/why-is-the-this-keyword-required-to-call-an-extension-method-from-within – Kami

답변

2

모든 확장 메서드는 일부 클래스의 확장입니다.
확장 프로그램을 사용하려면 해당 클래스의 인스턴스가 필요합니다.
확장자는 MasterPage의 인스턴스이고 MasterPage의 파생 인스턴스 내에서 사용합니다. 따라서 당신은 this

+0

나는 그것을 얻지 않는다. 일반적인 다형성 규칙은 모든 객체가 선언 된 유형의 인스턴스이며 상속되는 유형을 나타냅니다. 조상에서 선언 된 메서드는 상속됩니다. 왜 이것이 JIT의 클래스에 삽입 된 것처럼 보이는 확장 메서드에 대해 다른 것이 있습니까? 그런 다음 일반적인 메서드처럼 동작합니까? –

관련 문제