확장 메서드는 기존의 형식을 유지하면서 새로운 메서드를 추가하는 수단이다.
이것은 다음 규칙을 따른다.
- public이면서 정적 클래스에 정적 메서드로 정의한다.
- 첫 매개변수에 this 수정자를 붙인다.
- 첫 매개변수의 형식은 확장하려는 형식이다.
예시1
using System;
class _
{
static void Main()
{
string test = "이게 바로 확장 메서드이지! GOOD";
Console.WriteLine(test.nthWord(2)); // string에 커스텀 함수가 추가되었다. 출력결과: 바로
}
}
//n번째 단어를 출력하는 확장 메서드 만들기
public static class StringExtensions
{
public static string nthWord(this String str, int n) //이와같이 추가할 형식을 this 뒤에 쓴다.
{
if (n < 0)
throw new AggregateException("0이상의 숫자만 가능합니다."); //예외처리
var words = str.Split(' ');
if (n == 0 || n >= words.Length)
{
return "";
}
return words[n-1];
}
}
생각보다 간단하다. 형식에 필요한 함수를 간단하게 정의할 수 있고 사용할 수 있어서 좋은 것 같다.
확장메서드의 연쇄
확장 메서드도 연쇄 호출이 가능하다고 함.
ex) 변수.확장메서드1( ... ).확장메서드2( ... );
확장메서드의 우선순위
- 같은 이름의 확장 메서드와 인스턴스 메서드가 있으면 인스턴스 메서드가 사용된다.
(이 상황에서 만일 확장 메서드를 쓰려면 정적 메서드 구문을 써야함) - 같은 이름의 확장 메서드가 둘 이상 있으면 확장 메서드가 아니라 정적 메서드로 호출해야한다. 컴파일러가 우선순위 못 정함.
참고문헌: C# 8.0 in a Nutshell, Joseph Albahari. Eric Johannsen.
'C#' 카테고리의 다른 글
C# 이벤트(Events) (0) | 2020.11.26 |
---|---|
C# 람다식(Lambda Expressions) (0) | 2020.11.16 |
C#코딩의 기술 010. 클래스 하나로 증후군 (0) | 2019.01.30 |
009. 불필요한 형변환 남용 (4) | 2019.01.30 |
008. 의미 없는 구조체 사용 (3) | 2019.01.29 |