2014-02-24 3 views
1

매개 변수를 사용하지 않는 확장 메서드를 만들 수 있습니까? 확장 메서드를 처음 사용하고 매개 변수를 사용하는 경우에만 보았습니다. RB Whitaker's C# tutorial 가입일C# 매개 변수없는 확장 메서드

:

public static class StringExtensions 
{ 
    private static Random random = new Random(); 

    public static string ToRandomCase(this string text) 
    { 
     string result = ""; 

     for (int index = 0; index < text.Length; index++) 
     { 
      if (random.Next(2) == 0) 
      { 
       result += text.Substring(index, 1).ToUpper(); 
      } 
      else 
      { 
       result += text.Substring(index, 1).ToLower(); 
      }     
     } 

     return result; 
    } 
} 

또한 MSDN에서 :

는 "그들의 첫번째 파라미터 메소드가 동작하고, 상기 파라미터는 개질제 앞에는 유형 지정한다."

이 두, 특히 각 사이트의 코드 예제 (하나 여기에 게시)이 매개 변수는 키워드를 연결하는 데 사용되기 때문에, 그 확장 방법은 적어도 하나 개의 매개 변수가 있어야합니다 표시하는 것, to 메소드를 사용하여 클래스 나 클래스의 확장자로 등록 할 수 있습니다. 예를 들어,

public static StringExtension(this String a) {/*stuff*/} 

(이 또한 확장 메서드의 첫 번째 매개 변수가 확장 년대 클래스의 인스턴스를 수용해야한다는 것을 의미 다음의 경우,이다, 그렇다면 아마 잘못입니다.)

+2

왜 매개 변수없는 확장 방법을 원하십니까? 그러면 그게 무슨 연장이 될까요? –

+0

Console.Read()와 같은 매개 변수를 사용하지 않는 표준 라이브러리의 모든 메서드처럼 작동한다고 생각했습니다. 질문은 매개 변수없이 확장 메서드를 정의하고 Console.MyExt()와 같이 (이론적으로) 호출 할 수 있음을 의미했습니다. 그러나 나는 그렇지 않다는 것을 안다. –

+0

@Stopforgettingmyaccounts ... 확장 메소드는 * 인스턴스 *가 필요하지만'Console'은 클래스이므로, Console.MyExt와 같은 정적 메소드로 사용할 수있는 확장 메소드를 작성할 수 없다는 것에주의하십시오.)'. [기존 고정 클래스에 확장 메서드를 추가 할 수 있습니까?] (http://stackoverflow.com/questions/249222/can-i-add-extension-methods-to-an-existing-static-class) –

답변

7

맞습니다. 확장 메서드에는 this 수정 자로 표시된 하나 이상의 매개 변수가 필요합니다.

그러나 확장하고있는 클래스에 대한 참조를 사용하여 확장 메서드를 호출 할 때, 당신은 매개 변수를 지정하지 않을 :

StringExtensions.StringExtension("foo"); 

하더라도 :

"foo".StringExtension(); 

은 동일합니다 실제로 을 사용하지 마십시오. 메서드 내에서 매개 변수로을 사용하십시오. 확장 메서드에서 제공하는 구문을 사용하려면 선언해야합니다.

+0

우수합니다. 따라서 확장 메서드를 호출 할 때 첫 번째 매개 변수가 숨겨져 있습니까? –

+1

@Stopforgettingmyaccounts ... 수정하십시오. 컴파일러는 암시 적으로 객체를 함수의 첫 번째 매개 변수 인'.'의 왼쪽으로 전달합니다. –

관련 문제