C#/.NET(23): extension method
extension method(확장 메소드)의 기능
확장 메소드는 클래스 외부에 정의된 메소드이다.
static 클래스의 static 메소드로 선언하고 ‘static 클래스.static 메소드’로 호출할 수 있다.
확장 메소드를 사용하면, 클래스에 새로운 기능을 추가할 수 있다.
[extension method (1) - 예시 코드]
using System;
namespace ExtensionMethod
{
//public class StringOperations
//{
// public int GetNumberOfLines(string input)
// {
// return input.Split("\n").Length;
// }
//}
// extension method 는 class 외부에서 static 클래스로 선언
public static class StringExtensions // static 추가
{
public static int GetNumberOfLines(this string input) // static 추가 / 매개 변수에 this 추가
{
return input.Split("\n").Length;
}
}
internal class Program
{
static void Main(string[] args)
{
var multilineString = @"빨 - 빨 - 빨간 맛, 궁금해 honey 깨물면 점점 녹아든 strawberry 그 맛
Corner candy shop 찾아봐 baby
내가 제일 좋아하는 건 여름 그 맛
야자나무 그늘 아래 졸고 싶고
뜨거운 여름밤의 바람은 불고
너무 쉽게 사랑 빠져 버릴 nineteen
우린 제법 어울리고 또 멋져";
// var numberOfLines = new StringOperations().GetNumberOfLines(multilineString);
// Console.WriteLine(numberOfLines);
var numberOfLines = StringExtensions.GetNumberOfLines(multilineString);
Console.WriteLine(numberOfLines);
}
}
}
[extension method (2) - 예시 코드]
using System;
namespace ExtensionMethod1
{
public class Duck
{
public string Quack()
{
return "(확장 메소드 아님) 오리는 꽥꽥.";
}
}
// 확장 메소드 (1)
public static class DuckExtensions
{
public static string Quack(this Duck duck)
{
return "(확장 메소드 임) 오리는 꽥꽥.";
}
}
// 확장 메소드 (2)
public static class DuckExtensions1
{
public static string Quack(this Duck duck, int times)
{
return $"{times}번 꽥꽥 웁니다.";
}
}
internal class Program
{
static void Main(string[] args)
{
var duck = new Duck();
Console.WriteLine(duck.Quack(3));
// Console.WriteLine(DuckExtensions.Quack(duck));
}
}
}
3번 꽥꽥 웁니다.
extension method 요구 조건
- 확장 메소드가 정의된 클래스는 정적이어야 한다.
- 확장 메소드는 확장하길 원하는 클래스의 객체를 this 를 추가한 매개 변수로 가져야만 한다.
댓글남기기