Warum implementiert ListT die IReadOnlyListT-Schnittstelle? [Duplikat]

8

Warum implementiert List<T> IReadOnlyList<T> , obwohl List<T> nicht schreibgeschützt ist?

    
Doug 10.02.2014, 19:11
quelle

2 Antworten

8

Es ermöglicht Ihnen, einen schreibgeschützten "Proxy" dieser Liste verfügbar zu machen, so dass Sie diese Schnittstellenreferenz woanders übergeben können und wissen, dass der Code die Liste nicht mutieren wird. (Technisch kann es versuchen, es in etwas wie List zurück zu werfen und es zu mutieren, aber sollte das nicht machen .)

Es erlaubt auch einer Methode, spezifisch anzuzeigen, dass, während sie eine Liste annehmen muss, sie es nicht mutieren wird.

Wenn eine schreibgeschützte Schnittstelle verwendet wird, kann diese Schnittstelle auch kovariant sein, im Gegensatz zu List oder IList .

    
Servy 10.02.2014, 19:12
quelle
1

Sie können sich das in Form von Subtyping vorstellen. Eine reguläre Liste kann eine readonly-Liste sein, wenn Sie sie nicht ändern, dh List<T> ist ein Subtyp von IReadOnlyList<T> (ich bin nicht sicher, ob die C # -Typen das wirklich bestätigen). Mit der Eingabe können Sie festlegen, dass ein bestimmter Codeabschnitt keine Änderungen an der Liste vornimmt.

Ein anderes Beispiel für diese Art von Dingen ist in C, wo Sie eine int an eine Methode übergeben können, die eine const int akzeptiert oder eine int an eine Methode weitergibt, die eine volatile int erwartet. Es ist nicht schädlich, das Argument stringenter zu behandeln, als benötigt wird.

    
mrmcgreg 10.02.2014 19:19
quelle

Tags und Links