.NET 프레임 워크에 우선 순위 큐 클래스가없는 이유는 무엇입니까?
-
19-09-2019 - |
문제
구현을 다루는 스택 오버플로에 몇 가지 스레드가 있습니다. .NET 및 C#의 우선 순위.
내 문제는보다 기본적인 특성입니다. .NET 프레임 워크에 상자에서 우선 순위 대기열이없는 이유는 무엇입니까? C ++ 표준 라이브러리조차도 하나가 있습니다.
해결책
얼마 전에 질문이있었습니다 (C#이 C ++와 같은 비회원 기능을 허용하는 이유) Eric Lippert가 a 블로그 게시물 이유에 대해. 그것에서 그는 다음과 같이 설명합니다.
"C#이 기능 X를 구현하지 않는 이유는 무엇입니까?"라고 묻습니다. 항상. 대답은 항상 동일합니다. 아무도 해당 기능을 설계, 지정, 구현, 테스트, 문서화 및 배송하지 않았기 때문입니다. 기능을 수행하기 위해서는 6 가지가 필요합니다. 그들 모두는 엄청난 시간, 노력 및 돈이 들었습니다. 기능은 저렴하지 않으며, 우리는 제한된 시간, 노력 및 돈 예산을 고려할 때 사용자에게 최상의 이점을 제공하는 기능 만 배송하기 위해 매우 열심히 노력합니다.
나 의심하다 그것이 아마도 .NET이 우선 순위 대기열과 함께 배송되지 않는 이유에 대한 답일 것입니다. 시간, 노력, 돈, 요구 (?)를 구현할 수있는 충분한 시간이 없었습니다.
다른 팁
.NET 4.0 소개 a SortedSet<T>
클래스와 함께 ISet<T>
에 의해 구현되는 인터페이스 SortedSet<T>
그리고 HashSet<T>
. 이것은 분명히 자신의 구현이 더 간단하게 만들 것입니다. PriorityQueue<T>
수업.
그러나 여전히 아니요 IQueue<T>
최소한 기본 BCL보다 우선 순위 대기열 또는 기타 구현의 필요성을 인정하는 인터페이스 Queue<T>
. 마찬가지로, 아니요 IStack<T>
.
개인적으로 나는 기존 클래스에서 간단한 인터페이스를 추출하는 데 드는 디자인/사양/구현/테스트/문서 비용이 실제로 매우 낮아야하기 때문에 이러한 가장 기본적인 인터페이스 중 일부가 실망스럽고 근시안적으로 부족하다는 것을 알게됩니다.
public interface IQueue<T> : IEnumerable<T>, ICollection, IEnumerable
{
T Dequeue();
void Enqueue(T item);
T Peek();
}
거기, 봐요? 난 끝냈어.