이 질문이 너무 단순하다면 미리 사과드립니다.정적이 왜 여기에 필요합니까
아래 링크에서 NthIndexOf 메서드가 발견되면 왜 정적 클래스와 정적 클래스 멤버가 필요합니까?
C# - indexOf the nth occurrence of a string?
이 질문이 너무 단순하다면 미리 사과드립니다.정적이 왜 여기에 필요합니까
아래 링크에서 NthIndexOf 메서드가 발견되면 왜 정적 클래스와 정적 클래스 멤버가 필요합니까?
C# - indexOf the nth occurrence of a string?
확장 방법은 새로운 파생 된 유형을 만들어 다시 컴파일하거나 원래 형식을 수정하지 않고 기존의 유형과 방법을 "추가"할 수 있습니다. 확장 메서드는 특별한 종류의 정적 메서드이지만 확장 된 형식의 인스턴스 메서드 인 것처럼 호출됩니다. C# 및 Visual Basic으로 작성된 클라이언트 코드의 경우 확장 메서드를 호출하는 것과 형식에 실제로 정의 된 메서드간에 명백한 차이가 없습니다. 예를 들어
:
문자열은 닷넷 유형입니다. EM이 나오기 전에 파생되지 않으면 자신의 메서드를 문자열 유형에 추가 할 수 없습니다. 파생에 의해 그렇게했다하더라도,이 메서드는 문자열 형식이 아닌 파생 형식의 메서드로 계산됩니다.
하지만 이제 EM에서 파생되지 않고 EM을 사용할 수 있습니다. (C#에서) EM의
요구 사항
this
키워드가 있어야합니다. 그것 없이는, 당신의 방법은 EM이 아니며 정적 방법 일뿐입니다.당신의 EM NthIndexOf
scenaro하여 이전에는 당신이
int result = "My string".NthIndexOf("M", 0);
하는 경우로 호출 할 수 있도록 첫 번째 매개 변수는 문자열의 앞에이 포함되어 있으므로 StringExtender
public static class StringExtender
{
public static int NthIndexOf(this string target, string value, int n)
{
....
}
}
이제 정적 클래스에 정의되어 있습니다 EM이 아니고 평범한 정적 방법이었습니다.
다음은 자세한 답변을
int result = NthIndexOf("My string", "M", 0);
는 그것은 extension method (MSDN)이기 때문에 - 첫 번째 매개 변수 전에 키워드 this
을 알 수 있습니다. 당신이 System.String
유형으로 NthIndexOf
방법을 추가했다 것처럼 ...
var result = "foo bar".NthIndexOf("o", 1);
:
이것은 당신이 구문을 사용할 수 있습니다. 이것은 해당 정적 클래스의 네임 스페이스가 사용 가능한 곳이면 어디에서나 사용할 수 있습니다 (예 : using MyExtensions;
).
확장 메서드는 public, 중첩되지 않은 정적 클래스의 정적 메서드로 선언해야하지만 같은 논리를 확장 메서드를 사용하지 않고 캡슐화 할 수 있습니다.이 경우 정적 클래스 & 메서드를 사용할 필요가 없습니다.
정적 키워드가 필요한 extension method입니다.
감사처럼 호출했다. – GoBeavs
@OsuBrenden : 언제나 기쁩니다. –