2009-10-20 5 views
2

일부 C# 코드를 읽고 함수 매개 변수의 "this"키워드를 이해할 수 없습니까? 누군가는 그것이 무엇을 위해 사용되는지를 말해 줄 수 있습니까? 감사."this"는 무엇을 위해 사용됩니까?

public static class ControlExtensions 
{ 
    public static void InvokeIfNeeded(this Control ctl, 
     Action doit) 
    { 
     if (ctl.InvokeRequired) 
      ctl.Invoke(doit); 
     else 
      doit(); 
    } 

    public static void InvokeIfNeeded<T>(this Control ctl, 
     Action<T> doit, T args) 
    { 
     if (ctl.InvokeRequired) 
      ctl.Invoke(doit, args); 
     else 
      doit(args); 
    } 
} 

답변

18

extension method이 작동하는 유형을 지정하는 데 사용됩니다. 즉, public static void InvokeIfNeeded(this Control ctl, Action doit)은 "InvokeIfNeeded 메서드를 Control 클래스 (및 모든 파생 클래스)에"추가합니다. 그러나이 메서드는 선언 된 클래스의 네임 스페이스를 명시 적으로 해당 범위로 가져 오는 경우에만 사용할 수 있습니다.

+0

링크를 제공해 주셔서 감사합니다. –

3

확장 방법을 나타냅니다. 사용자가 지정한 예제에서 모든 Control 개체에는 InvokeIfNeeded (Action doit) 메서드를 사용할 수 있습니다. 이는 컨트롤에 이미있는 모든 메서드에 추가됩니다.

2

주어진 유형에 대해 extension method을 정의하는 데 사용됩니다.

0

'this'키워드를 이와 같은 매개 변수에 추가하면 메서드가 일반 정적 메서드가 아닌 확장 메서드로 해석됩니다.

0

메서드 선언의이 한정자는 메서드가 확장 메서드임을 나타냅니다.

1

메서드의 정적 선언과 전달 된이 한정자는 모든 컨트롤 개체가 초기에 그런 식으로 작성된 것처럼 추가 된 메서드를 갖게하는 Extension 메서드를 나타냅니다.

즉 : 이제 확장 방법에 추가되는 객체의 유형을 표시하는 데 사용됩니다

Control myControl = new Control(); 

myControl.InvokeIfNeeded(myaction); 

또는

myControl.InvokeIfNeeded(myaction, args); 
1

할 수 있습니다.

관련 문제