2009-12-12 5 views
1

Lors de l'utilisation de classes personnalisées avec des propriétés en lecture seule de type Liste ou similaires (ObservableCollection), il est toujours possible d'obtenir la variable et d'appeler une méthode Add() pour modifier le contenu. Existe-t-il un moyen d'arrêter ceci (sans créer de grandes surcharges de la classe List) sur l'accès 'externe', ou est-il préférable de traiter les listes d'une autre manière si elles ne doivent pas être modifiées en dehors de leur classe?Types de liste ignorant les propriétés ReadOnly?

+0

Pour répondre:. Je ne ai jamais entendu parler avant ReadOnlyCollection Si seulement quelqu'un avait un « coins et recoins de .NET » quelque part avec des trucs comme ReadOnlyCollection! , CompositeCollectio n, etc. –

Répondre

5

Lorsque vous décalez un type de référence en lecture seule, seule la référence à l'objet est en lecture seule. L'objet lui-même peut encore être modifié. Dans le cas d'une liste, vous pouvez utiliser ReadOnlyCollection pour exposer la collection afin qu'elle ne puisse pas être modifiée (et vous pouvez toujours utiliser une liste en interne pour stocker/modifier les données.)

FxCop a en fait une règle pour les capturer situations:

Do not declare read only mutable reference types

private List<string> _internalList = new List<string>(); 

public ReadOnlyCollection<string> ListProperty 
{ 
    get 
    { 
     return _inernalList.AsReadOnly(); 
    } 
} 

devrait faire l'affaire

2

Vous devez exposer les propriétés telles que le type:

ReadOnlyCollection<T> 

Qu'est-ce que « lecture seule » dans le cas d'une lecture seule référence la propriété est juste la référence à l'objet - il ne fait pas l'objet immuable.

Questions connexes