Assembly : mscorlib (dans mscorlib.dll)
Syntaxe<SerializableAttribute> _ <ComVisibleAttribute(False)> _ Public Class ReadOnlyCollection(Of T) Implements IList(Of T), ICollection(Of T), _ IEnumerable(Of T), IList, ICollection, _ IEnumerable
Dim instance As ReadOnlyCollection(Of T)
[SerializableAttribute] [ComVisibleAttribute(false)] public class ReadOnlyCollection<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable
[SerializableAttribute] [ComVisibleAttribute(false)] generic<typename T> public ref class ReadOnlyCollection : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable
J# prend en charge l'utilisation de types et de méthodes génériques mais pas la déclaration de nouveaux types et de méthodes génériques.
JScript ne prend pas en charge les types et les méthodes génériques.
Paramètres de type
- T
Type d'éléments de la collection.
NotesUne instance de la classe générique ReadOnlyCollection est toujours en lecture seule. Une collection en lecture seule est simplement une collection dotée d'un wrapper interdisant toute modification de la collection. Par conséquent, si la collection sous-jacente est modifiée, la collection en lecture seule reflète ces modifications. Consultez Collection pour obtenir une version modifiable de cette classe.
Remarques à l'attention des implémenteurs Cette classe de base est fournie pour permettre aux implémenteurs de créer une collection générique personnalisée et en lecture seule plus facilement. Il est préférable d'étendre cette classe de base plutôt que d'en créer une nouvelle.
ExempleL'exemple de code suivant illustre plusieurs membres de la classe ReadOnlyCollection. L'exemple de code crée un List de chaînes et lui ajoute quatre noms de dinosaures. L'exemple de code encapsule ensuite la liste dans ReadOnlyCollection.
Après la démonstration des membres Count, Contains, Item et System.Collections.IList.IndexOf, l'exemple de code indique que ReadOnlyCollection est simplement un wrapper du List d'origine en ajoutant un nouvel élément à List et en affichant le contenu de ReadOnlyCollection.
Enfin, l'exemple de code crée un tableau plus grand que la collection et utilise la méthode CopyTo pour insérer les éléments de la collection au milieu du tableau.
Imports System Imports System.Collections.Generic Imports System.Collections.ObjectModel Public Class Example Public Shared Sub Main() Dim dinosaurs As New List(Of String) dinosaurs.Add("Tyrannosaurus") dinosaurs.Add("Amargasaurus") dinosaurs.Add("Deinonychus") dinosaurs.Add("Compsognathus") Dim readOnlyDinosaurs As _ New ReadOnlyCollection(Of String)(dinosaurs) Console.WriteLine() For Each dinosaur As String In readOnlyDinosaurs Console.WriteLine(dinosaur) Next Console.WriteLine(vbLf & "Count: {0}", _ readOnlyDinosaurs.Count) Console.WriteLine(vbLf & "Contains(""Deinonychus""): {0}", _ readOnlyDinosaurs.Contains("Deinonychus")) Console.WriteLine(vbLf & _ "readOnlyDinosaurs(3): {0}", readOnlyDinosaurs(3)) Console.WriteLine(vbLf & "IndexOf(""Compsognathus""): {0}", _ readOnlyDinosaurs.IndexOf("Compsognathus")) Console.WriteLine(vbLf & "Insert into the wrapped List:") Console.WriteLine("Insert(2, ""Oviraptor"")") dinosaurs.Insert(2, "Oviraptor") Console.WriteLine() For Each dinosaur As String In readOnlyDinosaurs Console.WriteLine(dinosaur) Next Dim dinoArray(readOnlyDinosaurs.Count + 1) As String readOnlyDinosaurs.CopyTo(dinoArray, 1) Console.WriteLine(vbLf & "Copied array has {0} elements:", _ dinoArray.Length) For Each dinosaur As String In dinoArray Console.WriteLine("""{0}""", dinosaur) Next End Sub End Class ' This code example produces the following output: ' 'Tyrannosaurus 'Amargasaurus 'Deinonychus 'Compsognathus ' 'Count: 4 ' 'Contains("Deinonychus"): True ' 'readOnlyDinosaurs(3): Compsognathus ' 'IndexOf("Compsognathus"): 3 ' 'Insert into the wrapped List: 'Insert(2, "Oviraptor") ' 'Tyrannosaurus 'Amargasaurus 'Oviraptor 'Deinonychus 'Compsognathus ' 'Copied array has 7 elements: '"" '"Tyrannosaurus" '"Amargasaurus" '"Oviraptor" '"Deinonychus" '"Compsognathus" '""
using System; using System.Collections.Generic; using System.Collections.ObjectModel; public class Example { public static void Main() { List<string> dinosaurs = new List<string>(); dinosaurs.Add("Tyrannosaurus"); dinosaurs.Add("Amargasaurus"); dinosaurs.Add("Deinonychus"); dinosaurs.Add("Compsognathus"); ReadOnlyCollection<string> readOnlyDinosaurs = new ReadOnlyCollection<string>(dinosaurs); Console.WriteLine(); foreach( string dinosaur in readOnlyDinosaurs ) { Console.WriteLine(dinosaur); } Console.WriteLine("\nCount: {0}", readOnlyDinosaurs.Count); Console.WriteLine("\nContains(\"Deinonychus\"): {0}", readOnlyDinosaurs.Contains("Deinonychus")); Console.WriteLine("\nreadOnlyDinosaurs[3]: {0}", readOnlyDinosaurs[3]); Console.WriteLine("\nIndexOf(\"Compsognathus\"): {0}", readOnlyDinosaurs.IndexOf("Compsognathus")); Console.WriteLine("\nInsert into the wrapped List:"); Console.WriteLine("Insert(2, \"Oviraptor\")"); dinosaurs.Insert(2, "Oviraptor"); Console.WriteLine(); foreach( string dinosaur in readOnlyDinosaurs ) { Console.WriteLine(dinosaur); } string[] dinoArray = new string[readOnlyDinosaurs.Count + 2]; readOnlyDinosaurs.CopyTo(dinoArray, 1); Console.WriteLine("\nCopied array has {0} elements:", dinoArray.Length); foreach( string dinosaur in dinoArray ) { Console.WriteLine("\"{0}\"", dinosaur); } } } /* This code example produces the following output: Tyrannosaurus Amargasaurus Deinonychus Compsognathus Count: 4 Contains("Deinonychus"): True readOnlyDinosaurs[3]: Compsognathus IndexOf("Compsognathus"): 3 Insert into the wrapped List: Insert(2, "Oviraptor") Tyrannosaurus Amargasaurus Oviraptor Deinonychus Compsognathus Copied array has 7 elements: "" "Tyrannosaurus" "Amargasaurus" "Oviraptor" "Deinonychus" "Compsognathus" "" */
using namespace System; using namespace System::Collections::Generic; using namespace System::Collections::ObjectModel; void main() { List<String^>^ dinosaurs = gcnew List<String^>(); dinosaurs->Add("Tyrannosaurus"); dinosaurs->Add("Amargasaurus"); dinosaurs->Add("Deinonychus"); dinosaurs->Add("Compsognathus"); ReadOnlyCollection<String^>^ readOnlyDinosaurs = gcnew ReadOnlyCollection<String^>(dinosaurs); Console::WriteLine(); for each(String^ dinosaur in readOnlyDinosaurs ) { Console::WriteLine(dinosaur); } Console::WriteLine("\nCount: {0}", readOnlyDinosaurs->Count); Console::WriteLine("\nContains(\"Deinonychus\"): {0}", readOnlyDinosaurs->Contains("Deinonychus")); Console::WriteLine("\nreadOnlyDinosaurs[3]: {0}", readOnlyDinosaurs[3]); Console::WriteLine("\nIndexOf(\"Compsognathus\"): {0}", readOnlyDinosaurs->IndexOf("Compsognathus")); Console::WriteLine("\nInsert into the wrapped List:"); Console::WriteLine("Insert(2, \"Oviraptor\")"); dinosaurs->Insert(2, "Oviraptor"); Console::WriteLine(); for each( String^ dinosaur in readOnlyDinosaurs ) { Console::WriteLine(dinosaur); } array<String^>^ dinoArray = gcnew array<String^>(readOnlyDinosaurs->Count + 2); readOnlyDinosaurs->CopyTo(dinoArray, 1); Console::WriteLine("\nCopied array has {0} elements:", dinoArray->Length); for each( String^ dinosaur in dinoArray ) { Console::WriteLine("\"{0}\"", dinosaur); } } /* This code example produces the following output: Tyrannosaurus Amargasaurus Deinonychus Compsognathus Count: 4 Contains("Deinonychus"): True readOnlyDinosaurs[3]: Compsognathus IndexOf("Compsognathus"): 3 Insert into the wrapped List: Insert(2, "Oviraptor") Tyrannosaurus Amargasaurus Oviraptor Deinonychus Compsognathus Copied array has 7 elements: "" "Tyrannosaurus" "Amargasaurus" "Oviraptor" "Deinonychus" "Compsognathus" "" */
Sécurité des threadsLes membres statiques publics (Shared en Visual Basic) de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.
ReadOnlyCollection peut prendre simultanément en charge plusieurs lecteurs, tant que la collection n'est pas modifiée. Même dans ce cas, l'énumération d'une collection n'est pas intrinsèquement une procédure thread-safe. Pour garantir la sécurité des threads pendant l'énumération, vous pouvez verrouiller la collection pendant toute la durée de cette opération. Pour permettre à plusieurs threads d'accéder en lecture et en écriture à la collection, vous devez implémenter votre propre synchronisation.
Plates-formesWindows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile pour Pocket PC, Windows Mobile pour Smartphone, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition
Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.
Informations de version
Outils (masquer)
S'enregistrer
Liste des Membres
Qui est en ligne?
FAQ