codememo

C#에서 메서드 그룹이란 무엇입니까?

tipmemo 2023. 5. 3. 21:27
반응형

C#에서 메서드 그룹이란 무엇입니까?

다음과 같은 경우 "method group'에서 'string'으로 변환할 수 없습니다."와 같은 오류를 자주 접했습니다.

var list = new List<string>();
// ... snip
list.Add(someObject.ToString);

물론 마지막 줄에 오타가 있었습니다. 왜냐하면 저는 호출 괄호를 잊어버렸기 때문입니다.ToString올바른 형식은 다음과 같습니다.

var list = new List<string>();
// ... snip
list.Add(someObject.ToString()); // <- notice the parentheses

그런데 메소드 그룹이 무엇인지 궁금하게 되었습니다.구글은 MSDN이나 큰 도움이 되지 않습니다.

메소드 그룹은 (단 하나일 수도 있는) 메소드 집합의 이름입니다. 즉, 이론적으로ToString메소드에는 여러 오버로드가 있을 수 있습니다(추가 확장 메소드). ToString(),ToString(string format)기타 - 그러므로ToString그 자체가 "위험한 그룹"입니다.

일반적으로 메서드 그룹을 오버로드 해결을 사용하여 (입력된) 대리자로 변환할 수 있지만 문자열 등으로는 변환할 수 없습니다.

괄호를 추가하면 다시 한 번 오버로드 해결이 시작되고 메서드 호출을 명확하게 식별할 수 있습니다.

또한, 만약 당신이 LINQ를 사용하고 있다면, 당신은 분명히 다음과 같은 것을 할 수 있습니다.myList.Select(methodGroup).

예를 들어, 저는 다음을 가지고 있습니다.

private string DoSomethingToMyString(string input)
{
    // blah
}

이렇게 사용할 변수를 명시적으로 설명하는 대신:

public List<string> GetStringStuff()
{
    return something.getStringsFromSomewhere.Select(str => DoSomethingToMyString(str));
}

var의 이름을 생략할 수 있습니다.

public List<string> GetStringStuff()
{
    return something.getStringsFromSomewhere.Select(DoSomethingToMyString);
}

메서드 그룹을 위임자로 캐스팅할 수 있습니다.

위임 서명은 그룹 중에서 하나의 메서드를 선택합니다.

이 예에서는 다음을 선택합니다.ToString()문자열 매개 변수를 사용하는 오버로드:

Func<string,string> fn = 123.ToString;
Console.WriteLine(fn("00000000"));

이 예에서는 다음을 선택합니다.ToString()매개 변수를 사용하지 않는 과부하:

Func<string> fn = 123.ToString;
Console.WriteLine(fn);

MSDN 검색의 첫 번째 결과는 다음과 같습니다.

메서드 그룹은 호출할 단일 메서드 또는 호출할 특정 메서드를 선택할 오버로드된 메서드 집합을 식별합니다.

제가 이해하는 것은 기본적으로 당신이 그냥 글을 쓸 때입니다.someInteger.ToString다음은 다음을 가리키는 말입니다.

Int32.ToString(IFormatProvider) 

또는 다음을 가리키는 말입니다.

Int32.ToString()

그래서 그것은 메소드 그룹이라고 합니다.

ToString함수에 많은 오버로드가 있습니다. 메서드 그룹은 해당 함수에 대한 모든 다른 오버로드로 구성된 그룹입니다.

언급URL : https://stackoverflow.com/questions/886822/what-is-a-method-group-in-c

반응형