Bonjour,

J'ai créé une classe qui hérite de System.Collections.ObjectModel.ReadOnlyCollection(Of T)
J'ai implementé une methode dans laquelle je dois énumérer ma collection.

Compte du fait que la liste sous-jacente (passé via le constructeur) ne sera jamais modifiée (la reférence est perdue), puis-je considérer que ma classe fille est thread safe ?

Voici le code, trés simple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
Public Class MyReadOnlyCollection
 
    Inherits System.Collections.ObjectModel.ReadOnlyCollection(Of MyClasse)
 
    Public Sub New(ByVal listOfMyClass As System.Collections.Generic.IList(Of MyClasse))
 
        MyBase.New(listOfMyClass)
 
    End Sub
 
    Public Function GetPath(ByVal idBatch As Integer) As String
 
        Dim searchId As Integer
 
        searchId = idBatch Mod (MyBase.Count)
 
        For Each Objt As MyClasse In Me
 
           If searchId = Objt.Id Then Return Objt.FolderPath
 
        Next
 
        Return String.Empty
 
     End Function
 
End Class
D'ailleurs mis à pars ajouter un bloc SyncLock pour encapsuler ma function je ne vois pas trop ce que je peux faire d'autre.
Mais je ne pense pas que ce soit utile, cette méthode n'utilise aucune ressource partagé, si ce n'est la collection en lecture seule, qui selon MSDN semblre thread-safe en lecture :

ReadOnlyCollection peut prendre simultanément en charge plusieurs lecteurs, tant que la collection n'est pas modifiée.

http://msdn.microsoft.com/fr-fr/libr...74(VS.85).aspx
Dans le même esprit j'ai une dernière question : plusieurs threads manipulent la même instance d'un objet, ces manipulations ne sont que des lectures des propriétés de l'instance de mon objet.
Dois-je protéger les accés aux propriété via un SyncLock dans les accesseurs ?
Typiquement dans mon exemple il s'agirait de proteger les accesseurs de mon objet "MyClass" dont je ne fait que lire les propriétés id et FolderPath.

Merci de vos lumières
M@el