2010-03-16 9 views
8

Tak, właśnie kopanie wokół reflektor próbując znaleźć szczegóły implementacyjne HashSet (z czystej ciekawości, na podstawie odpowiedzi na pytanie innego tutaj) i zauważył, co następuje:Dlaczego TreeSet <T> jest typem wewnętrznym w .NET?

internal class TreeSet<T> : ICollection<T>, IEnumerable<T>, ICollection, 
    IEnumerable, ISerializable, IDeserializationCallback 

Nie patrząc zbyt głęboko w szczegóły, wygląda jak samobalansujące drzewo binarne wyszukiwania.

Moje pytanie brzmi, czy jest ktoś tam z wglądem, dlaczego ta klasa to internal? Czy to po prostu dlatego, że inne typy kolekcji używają go wewnętrznie i ukrywają złożoność BST przed masami ogólnymi ... czy jestem poza bazą?

Odpowiedz

10

Ujawnianie publicznie typu wymaga o wiele więcej pracy niż tylko eksponowanie go wewnętrznie - oznacza to, że musisz być absolutnie pewien, że nie chcesz później wprowadzać istotnych zmian w interfejsie API, musisz udokumentować to dokładnie itd.

Nie zdziwiłbym się, gdyby TreeSet<T> został ujawniony w przyszłym wydaniu, ale ma sens, aby stwardnienie rozsiane było ostrożne, zanim zrobi coś publicznie.

(wierzę, że SortedSet<T> w .NET 4 jest w zasadzie zbiorem drzewo, btw.)

+0

Masz rację. SortedSet Wygląda jak czerwono-czarny BST. Dziękuję za szybką odpowiedź. –

+2

Przeczytaj następujący artykuł, aby dowiedzieć się, ilu pracowników firmy Microsoft rzeczywiście robi, aby ta funkcja była publiczna: http://blogs.msdn.com/ericlippert/archive/2003/10/28/53298.aspx – Steven

Powiązane problemy