const Dictionnaire en c#
J'ai une classe en C# qui contient un Dictionnaire, j'ai envie de créer et de s'assurer que rien n'ajoutés, modifiés ou supprimés à partir de ce dictionnaire aussi longtemps que la classe qui le contient existe.
en lecture seule n'aide pas vraiment, une fois que j'ai testé et vu que je peux ajouter des articles après. Juste pour exemple, j'ai créé un exemple:
public class DictContainer
{
private readonly Dictionary<int, int> myDictionary;
public DictContainer()
{
myDictionary = GetDictionary();
}
private Dictionary<int, int> GetDictionary()
{
Dictionary<int, int> myDictionary = new Dictionary<int, int>();
myDictionary.Add(1, 2);
myDictionary.Add(2, 4);
myDictionary.Add(3, 6);
return myDictionary;
}
public void Add(int key, int value)
{
myDictionary.Add(key, value);
}
}
Je veux la méthode Add de ne pas travailler. Si possible, je veux pas de même de la compilation. Des suggestions?
En fait, je suis inquiet car c'est le code qui sera ouvert pour beaucoup de gens à changer. Donc, même si je me cache de la méthode Add, il sera possible pour quelqu'un de "innocemment" créer une méthode qui ajoute une touche ou en supprimer un autre. Je veux que les gens regardent et savent qu'ils ne faut pas changer le dictionnaire de toutes les manières. Comme j'ai une variable const.
Vous pouvez implémenter votre propre Dictionnaire. Question similaire: stackoverflow.com/questions/35002/...
OriginalL'auteur Samuel Carrijo | 2009-05-12
Vous devez vous connecter pour publier un commentaire.
Il n'y a rien dans le .NET Framework pour vous aider ici, mais ce post donne une assez bonne mise en œuvre d'un générique
ReadOnlyDictionary
en C#. Elle implémente toutes les interfaces que vous pensez qu'il (IDictionary
,ICollection
,IEnumerable
, etc.) et en bonus, l'ensemble de la classe et ses membres sont entièrement commentée avec XML.(Je me suis abstenu de poster le code ici, parce que c'est vraiment assez longue avec tous les commentaires XML.)
Ouais, on devrait toujours le lien vers la source originale de la première - comme vous le dites, il est préférable d'attribuer à l'auteur. Mon opinion est que si le code/texte est assez court, il est généralement utile de miroir ici (dans le cas où le site tombe en panne par exemple), mais ce n'est pas vraiment approprié dans ce cas.
Merci pour le référencement de mon article :-).
OriginalL'auteur Noldorin
Cacher le Dictionnaire totalement. Il suffit de fournir une méthode d'obtenir sur le DictContainer classe qui récupère des éléments du dictionnaire.
OriginalL'auteur Neil Barnwell
Hein... alors ne pas définir la Méthode Add...
Garder le
myDictionary
variable privée et d'exposer un Getter/Indexeur de sorte qu'il ne peut être lu de l'extérieur de la classe..se demande si il est complètement à côté de la question
OriginalL'auteur Eoin Campbell
Il n'y a pas de façon de le faire, pensez à utiliser une classe wrapper.
OriginalL'auteur arul
pour ajouter des éléments personnalisés;
OriginalL'auteur Tolgahan Albayrak
et c'est une autre façon
n'a pas
virtual
méthodes.pourquoi était-ce downvoted? - @SLaks: bon
OriginalL'auteur Tolgahan Albayrak
J'ai aimé le lien de bruno-conde, ce qui était plus simple, mais une fois que je ne peux pas marquer son commentaire comme la réponse, je vais marquer Noldorin réponse officielle, c'est une semblable et de réponse satisfaisante.
Trop mauvais, il n'y a pas une façon de prévenir le code à partir de la compilation :(. Merci, les gars
OriginalL'auteur Samuel Carrijo
Voici une meilleure alternative que j'ai décrit:
http://www.softwarerockstar.com/2010/10/..
Essentiellement, c'est une solution beaucoup plus simple sous-classement ReadOnlyCollection, qui obtient le travail fait dans un de plus élégant.
OriginalL'auteur SoftwareRockstar
Pour info, il est maintenant intégré à .net 4.5.
http://msdn.microsoft.com/en-us/library/gg712875(v=vs. 110).aspx
OriginalL'auteur batbaatar