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
.
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.