728x90
확장 메서드를 사용하는 경우
대부분 기존에 개발된 타입을 개선하기 위해 사용한다.
동작 방식 변경을 위한 게 아니다.
확장 메서드를 잘못 사용한 예
확장 메서드를 이용하여 클래스를 확장하는 경우
namespace ConsoleExtensions
{
public static class ConsoleReport
{
public static string Format(this Person target) =>
$"{target.LastName, 20}, {target.FirstName, 15}";
}
}
네임스페이스를 달리하여 확장 메서드를 추가로 정의하는 경우
namespace XmlExtensions
{
public static class XmlReport
{
public static string Format(this Person target) =>
new XElement("Person",
new XElement("LastName", target.LastName),
new XElement("FirstName", target.FirstName)
).ToString();
}
}
실수로 네임스페이스를 잘못 참조하면 프로그램의 동작 방식이 바뀌어버린다.
또는 참조하지 않으면 프로그램이 컴파일되지 않는다.
결론
확장 메서드를 여러 네임스페이스 걸쳐 오버로드 하면 안 된다.
컴파일러가 using 문장을 기반으로 오버 로드된 메서드 중 하나를 선택하는 이상한 상황이 벌어지기 때문이다.
대신 메서드의 이름을 달리하고 정적 메서드로 작성하는 것을 고려해야 한다.
반응형
'개발공부 > C#' 카테고리의 다른 글
[Effective C#] 아이템 37 : 쿼리를 사용할 때는 즉시 평가보다 지연 평가가 낫다. (0) | 2021.12.12 |
---|---|
[Effective C#] 아이템 36 : 쿼리 표현식과 메서드 호출 구문이 어떻게 대응되는지 이해하라 (0) | 2021.12.11 |
[Effective C#] 아이템 34 : 함수를 매개변수로 사용하여 결합도를 낮추라 (0) | 2021.12.09 |
[Effective C#] 아이템 32 : Action, Predicate, Function과 순회 방식을 분리하라 (0) | 2021.12.08 |
[Effective C#] 아이템 31 : 시퀀스에 사용할 수 있는 조합 가능한 API를 작성해라 (0) | 2021.12.07 |