2009-07-08 5 views
3

가독성 향상 이외의 목적을 달성하지 못하는 확장 메서드 사용에 대한 일반적인 생각은 무엇입니까?가독성 향상을위한 확장 메서드 사용

확장 방법을 사용하지 않고 우리는

var descendents = GetDescendents(someControl); 

또는 아무 잘못이와있다 없지만

foreach (var descendent in GetDescendents(someControl)) {} 

호출 할 수

IEnumerable<DependencyObject> GetDescendents(DependencyObject root) {} 

내가 인스턴스를 찾을 방법이있을 수 있습니다 .method() 표기법을 좀 더 읽기 쉽도록 확장 메서드로 만들 것을 고려해 볼 수 있습니다. w 허용이 서명

public IEnumerable<DependencyObject> GetDescendents(this DependencyObject root) {} 

i 번째 그것은 그래서 내 질문이 합리적 또는 확장 메서드의 남용이라고 생각 여부

var descendents = someControl.GetDescendents(); 

또는

foreach (var descendent in someControl.GetDescendents()) {} 

호출합니다. 단순히 기능을 다르게 선언하는 문제라면 주저하지 않을 것입니다. 하지만 확장 메소드를 사용하려면 정적 클래스로 코딩해야한다는 사실 때문에 노력할만한 가치가 있는지 없는지 궁금합니다. 위에서 사용하고있는 예제는 꽤 일반적이며, 여러 곳에서 사용될 확장 메소드로서의 장점이 있지만, 종종 그렇지 않습니다. 그리고 같은 파일에 확장자를 포함하는 정적 클래스를 코딩 할 것입니다. 그것을 사용하는 단일 클래스.

답변

3

확장 메서드의 큰 장점은 검색 가능성이라고 생각합니다. 팀원 중 한 명이 유틸리티 클래스의 GetDescendents 메소드를 어딘가에 만들었다는 것을 모르는 사람은 유틸리티를 사용하지 않습니다. 그러나 Intellisense 또는 Object Browser에 해당 메서드가 나타나기 시작하면 해당 메서드가 Intellisense를 우연히 발견하게됩니다. 확장 메소드를 더 광범위하게 사용하기 시작하면, 사람들은 내가 언급 한 툴을 사용하여 가치를 추가하는 확장 기능을 찾습니다.

+0

나는이 부분을 결코 생각하지 못했습니다. 그것은 많은 의미가 있습니다. –

2

대부분의 확장 방법이 정적 함수보다 더 이상 클래스의 내부에서 작동 할 수 없기 때문에 대부분이 확장 클래스가이 범주에 해당하는 것은 아닙니다. 어쨌든, 어떤 확장 메소드도 객체를 나타내는 추가 매개 변수로 정적 클래스에서 재 작성 될 수 있습니다 (어쨌든 확장 메소드가 어쨌든 정확히 무엇인지).

나에게 이것은 완전히 스타일의 문제입니다. 제공 한 예에서 확장 메서드로 점프했을 것입니다. 여기에 중요한 질문이 있다고 생각합니다. 클래스를 다시 구현해야한다면이 함수가 클래스의 일부로 쓰게 될 것입니까? "예"이면 대답하고, 그렇지 않으면 다른 해결책을 고려하십시오.

1

확장 성 방법은 가독성을 높이기 위해서만 존재하며, 첫 번째 인수에 this 키워드를 지정하면 해당 객체 인스턴스에 대해 메소드를 호출 할 수있게 해주는 구문 단축키 일뿐입니다. 그래서 전적으로 합리적이라고 생각합니다.