최근에 확장 메서드를 사용하여 내가 제어하는 클래스에 도우미 유틸리티를 구현하는 아이디어를 가지고 놀았습니다 (즉, 같은 프로그램에 있으며 수정). 그 뒤에있는 이론적 근거는 여러 번 사용되는 헬퍼 유틸리티가 매우 특정한 시나리오에서 사용되고 클래스 내부 값에 액세스 할 필요가 없다는 것입니다.수정할 수있는 클래스에 확장 메서드를 사용할 수 있습니까?
예를 들어 StackExchange 클래스가 있다고 가정 해 보겠습니다. PostQuestion
및 Search
및 AnswerQuestion
과 같은 메소드가 있습니다.
이제 StackOverflow가 나를 속일 수 없도록 내 평판을 수동으로 계산하고 싶습니다. 나는의 라인을 따라 뭔가 구현하는 것 : 나는 StackExchange 클래스에 메서드를 추가 할 수
int rep=0;
foreach(var post in StackExchangeInstance.MyPosts)
{
rep+=post.RepEarned;
}
을하지만, 어떤 내부를 필요로하지 않으며, 단지 프로그램의 하나 개 또는 두 개의 다른 부분에서 사용된다 .
대신에 이러한 특정 도우미 메서드가 10 개 또는 20 개있는 경우를 상상해보십시오. 특정 시나리오에서는 유용하지만 일반적인 경우에는 분명히 아닙니다. 내 생각은
namespace Mynamespace.Extensions.RepCalculations
{
public static RepCalcExtensions
{
public static int CalcRep(this Stackexchange inst){...}
}
}
주 네임 스페이스 같은 것으로
public static RepCalcHelpers
{
public static int CalcRep(StackExchange inst){ ... }
}
같은 것을 변화하고 있습니다. 특정 시나리오 내에서 확장 방법을 그룹화하는 데 이상적으로 사용합니다. 예를 들어, "RepCalculations", "Statistics"등
이 유형의 패턴이 전혀 들리지 않았으며 클래스 이외의 용도로 사용되는 확장 메서드의 증거를 찾지 못했습니다. 당신은 수정할 수 없습니다.
"패턴"에는 어떤 단점이 있습니까? 대신에 상속 또는 구성에 충실해야 하는가 아니면 이걸위한 정적 헬퍼 클래스가 좋은가?
확장 메서드는 원래 클래스를 수정할 수 없을 때 사용하기위한 메서드입니다. 당신이 클래스를 구현하는 사람이라면, 나는 부가가치를 보지 못한다. 메소드를 별도의 코드 파일에 넣으려면'partial' 키워드를 사용할 수 있습니다. –
명확히하기 위해, 당신은 이것을 할 것입니다. 그래서 여러분은 edge-case 확장 메소드를 보유하고있는 특정'using' 문을 포함하지 않음으로써 특정 기능을 숨길 수 있습니다. ?? 매우 흥미로운! –
확장 메소드의 장단점을 지정하는 [this] (http://stackoverflow.com/a/551600/649524) 링크를 확인할 수 있습니다. – Tilak