2010-03-16 3 views
8

Also grub ich gerade um Reflector versuchen, die Details der Implementierung HashSet zu finden (aus purer Neugier auf der Grundlage der Antwort auf eine andere Frage hier) und bemerkte folgendes:Warum ist TreeSet <T> ein interner Typ in .NET?

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

Ohne einen Blick zu tief in die Details, es sieht aus wie eine Self-Balancing Binary Search Tree.

Meine Frage ist, gibt es jemanden da draußen mit der Einsicht, warum diese Klasse internal ist? Ist es einfach, weil die anderen Sammlungstypen es intern verwenden und die Komplexität eines BST vor der allgemeinen Masse verbergen ... oder bin ich weit weg von der Basis?

Antwort

10

Die öffentliche Freigabe eines Typs ist mit viel mehr Aufwand verbunden als die interne Offenlegung. Es bedeutet, dass Sie absolut sicher sein müssen, dass Sie später keine wesentlichen Änderungen an der API vornehmen müssen es gründlich etc.

Ich wäre nicht überrascht, eine TreeSet<T> in einer zukünftigen Version ausgesetzt zu finden, aber es macht Sinn für MS vorsichtig zu sein, bevor etwas öffentlich gemacht wird.

(Ich glaube, dass SortedSet<T> in .NET 4 ist im Grunde ein Baum Set, btw.)

+0

Du hast Recht. SortedSet Sieht aus wie eine rot-schwarze BST. Danke für die schnelle Antwort. –

+2

Lesen Sie den folgenden Artikel, wenn Sie wissen möchten, wie viele Microsoft-Mitarbeiter diese Funktion öffentlich machen: http://blogs.msdn.com/ericlippert/archive/2003/10/28/53298.aspx – Steven

Verwandte Themen