2014-11-28 4 views
1

전 C# 비교적 새로운 오전과 내가 인수의 종류는 다음과 같은 기능의 창 부분 클래스에 전달되는 궁금 해서요 :어떤 종류의 인수가 전달됩니까?

public static void process(this Window window){...} 

내가 유형이 Window 알지만, 왜 갖고있는 것 같다 않습니다 인수 - 유형 - 인수 구문? 그리고 실제로 인수가 전달됩니다.

감사합니다.

추신 : 저는 실제로 정적 부분을 잊었습니다! 미안!

+0

'확장 Method' – dcastro

+2

를 컴파일하지 않는 @FlatEric 그것은 깨진 확장 방법입니다. 확장 메소드는 정적이어야합니다. –

+2

라고이 –

답변

5

서명의 정적 부분을 잊어 버렸다는 가정하에 확장 방법입니다. 데코레이터 패턴의 대안으로 기존 클래스에 기능을 추가 할 수 있습니다. 서명의 this은 확장하려는 클래스임을 지정합니다. 예를 들면 : - 메서드 구문

var w = new Window(); 
w.Process(); 
1

이 방법에서는 아무런 인수도 전달하지 않습니다. Window이라는 유형의 확장 메소드입니다. (주문이 오해하지 않도록, 우리는 확장 메서드에 인수를 전달할 수 있습니다,하지만이 확장 메서드는 인수가 없습니다.) 그래서 아래와 같이 사용할 수 있습니다. window이의 인스턴스

window.process() 

Window.

확장 방법에 대한 자세한 내용은 here을 참조하십시오.

1

당신이 static 수정을 추가하는 의미 가정,이 객체를 통해 caled 할 수있는 Extnsion 방법이다. 그럼에도 불구하고, 컴파일러는 이것을 컴파일 할 때 타입 - 메소드 (객체) 구문으로 바꿀 것입니다. 이것은 단지 구문 설탕으로 첫 번째 방법으로 배열됩니다. 이 때문에 인식 할 수없는 메서드에 대한 오류는 no extension method accepting a first argument of type... 절을 포함합니다.

1

이것은 C# "확장 메서드"기능입니다. 코드를 사용하여 다른 클래스를 확장 할 수 있습니다.

예를 들어 "int"유형에 새 메소드를 추가 할 수 있습니다.

게시 한 메서드는 Window 클래스를 확장하여 "프로세스"메서드를 추가합니다 (C# 표준에 따라 "프로세스"와 같은 이름을 지정해야 함).

window.process(); 

당신 수수 읽고 예를 들면 여기를 사용하는 방법에 대한 자세한 : 그것은 당신이 그런 식으로, 코드에서 사용할 수 있습니다 http://msdn.microsoft.com/en-us/library/bb383977.aspx

관련 문제