누구든지 이것을 설명 할 수 있습니까? (초보자 접근). 감사합니다 ..C#에서 "확장 방법"이란 무엇을 의미합니까?
답변
확장 방법들이 다른 클래스에 정의 된 것처럼 동작 정적 클래스의 정적 인 방법이 있습니다 :
그것은이 방법을 사용할 수있다.
형식 앞에있는 첫 번째 매개 변수는 확장 메서드임을 나타내는 this
키워드가됩니다.
예 :
public static class Extensions
{
public static object ExtensionMethodForStrings(this string s, object otherParameter)
{
//....
return //whatever you want to return or not
}
}
이는 시스템에 확장 방법이다.두 개의 매개 변수를 문자열 : 는 - 문자열들 : -
정적 : 당신은 아무도
두 가지 방법으로이 방법을 호출 할 수 있습니다 포함되지 원하는만큼을 가질 수 객체 otherParameter이 인스턴스 변수 입니다 방법 :
string s = "Your string";
object o = new object(); // or whatever you want
object result = Extensions.ExtensionMethodForStrings(s,o);
확장 메서드 방법
string s = "Your string";
object o = new object(); // or whatever you want
object result = s.ExtensionMethodForStrings(o);
두 번째 경우에는 형식 문자열에 ExtensionMethodForStrings라는 인스턴스 메서드가있는 것처럼 작동합니다. 실제로 컴파일러에 대해서는 동등합니다.
+1 당신이 여전히 정상적인 정적 방법이라고 부를 수 있다고 지적했습니다. 뿐만 아니라 'null'참조에서 호출 할 수도 있습니다. 메서드를 작성할 때이 두 가지 사실을 염두에 두는 것이 중요합니다. 'this' 인수가 null이 될 수 없다고 가정하지 마십시오. – Rich
확장 메서드를 사용하면 새 파생 형식을 만들거나 다시 컴파일하거나 원래 형식을 수정하지 않고도 기존 형식에 메서드를 "추가"할 수 있습니다. 확장 메서드는 특별한 종류의 정적 메서드이지만 확장 된 형식의 인스턴스 메서드 인 것처럼 호출됩니다. C# 및 Visual Basic으로 작성된 클라이언트 코드의 경우 확장 메서드를 호출하는 것과 형식에 실제로 정의 된 메서드간에 명백한 차이가 없습니다.
확장 메서드는 정적 클래스의 정적 메서드이며, 첫 번째 매개 변수 앞에 키워드 this
이옵니다.
C# 컴파일러에는 x.Foo(bar)
의 전화를 SomeExtension.Foo(x, bar)
으로 변환 할 수있는 구문 설탕이 있습니다. 이것은 LINQ (Take, Skip, Where, Select 등)에 광범위하게 사용되지만 원하는 경우 사용자 고유의 확장 방법을 작성할 수도 있습니다.
연장 방법은 클래스의 멤버와 같은 (다소) 동작 방법이지만 :
이 질문 유용 확장 방법의 예를 많이 포함 해당 클래스의 멤버가 아닙니다. 이 클래스의 멤버에게 호출 할 수는 있지만 클래스의 내부에 대한 참조는 없습니다.
확장 메서드는 정적 메서드이며 정적 클래스의 멤버 여야합니다.
public static class StringExtensions
{
public static string HtmlEncode(this string dataString)
{
return HttpServerUtility.HtmlEncode(dataString);
}
}
첫 번째 매개 변수 유형보다 키워드 "this"가 먼저 확장 방법 및 확장하는 클래스로 식별됩니다.
string foo = "bar";
string myOutput = foo.HtmlEncode();
- 1. C에서 ** 연산자는 무엇을 의미합니까?
- 2. C에서 'where'키워드는 무엇을 의미합니까?
- 3. [,] C에서 무엇을 의미합니까?
- 4. Objective-C에서 & 기호는 무엇을 의미합니까?
- 5. C에서 "파일 끝"은 무엇을 의미합니까?
- 6. Objective-C에서 기호 ^는 무엇을 의미합니까?
- 7. Objective-C에서 "@public"은 무엇을 의미합니까?
- 8. "Context"는 Cocoa/Objective-c에서 무엇을 의미합니까?
- 9. C에서 선언 내에서 콜론은 무엇을 의미합니까?
- 10. 이 코드는 objective-c에서 무엇을 의미합니까?
- 11. Objective-C에서 "@private"는 무엇을 의미합니까?
- 12. C에서 후위 "_t"는 무엇을 의미합니까?
- 13. 확장 방법이란 무엇이며 왜 사용해야합니까?
- 14. devise의 database_authenticatable의 "확장"은 무엇을 의미합니까?
- 15. 무엇을 의미합니까?
- 16. "_"은 무엇을 의미합니까?
- 17. "메타"라는 단어는 무엇을 의미합니까?
- 18. 개체에 자바 스크립트가없는 것은 무엇을 의미합니까?
- 19. 클래스 선언에서 확장은 무엇을 의미합니까?
- 20. C에서 winsock2.h를 사용하지만 다음 오류는 무엇을 의미합니까?
- 21. Expected specifier-qualifier-list는 Xcode/Objective-C에서 무엇을 의미합니까?
- 22. C에서 "varName에 대한 정의되지 않은 참조"는 무엇을 의미합니까?
- 23. 이것은 무엇을 의미합니까?
- 24. 단위 테스트는 무엇을 의미합니까?
- 25. 벡터화 란 무엇을 의미합니까?
- 26. JSON에서 .d는 무엇을 의미합니까?
- 27. 이 오류는 무엇을 의미합니까?
- 28. "벌크로드"란 무엇을 의미합니까?
- 29. pty와 tty는 무엇을 의미합니까?
- 30. HyperLink에서 EnableViewState는 무엇을 의미합니까?
http://social.msdn.microsoft.com/Search/en-US/?Query=extension+methods+c%23 –
http://msdn.microsoft.com/en-us/library/bb383977 aspx –
모든 답변 주셔서 감사합니다 ... :)) – yonan2236