You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
2.5 KiB
55 lines
2.5 KiB
// ========================================================================
|
|
//
|
|
// Copyright (C) 2016-2017 MARC CHEVALDONNE
|
|
// marc.chevaldonne.free.fr
|
|
//
|
|
// Module : MonLit.cs
|
|
// Author : Marc Chevaldonné
|
|
// Creation date : 2016-01-10
|
|
//
|
|
// ========================================================================
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
|
|
namespace ex_023_018_ReadOnlyDictionaries
|
|
{
|
|
/// <summary>
|
|
/// L'exemple suivant montre comment encapsuler un dictionnaire dans les cas suivants :
|
|
/// => les clés et/ou valeurs sont mutables, c'est-à-dire qu'on peut modifier leur état interne en appelant leurs méthodes ou propriétés
|
|
/// => MonLit possède un dictionnaire de paire clé (string)- valeur (Nounours) privée mNounoursDico où Nounours est mutable
|
|
/// Comment encapsuler correctement un dictionnaire de ce type ?
|
|
/// Dans l'exemple suivant, nous voulons protéger le dictionnaire contre :
|
|
/// - les modifications du dictionnaire (ajout ou suppression d'éléments),
|
|
/// - la modification du dictionnaire lui-même (on ne doit pas pouvoir faire de new)
|
|
///
|
|
/// En résumé, nous cherchons à rendre publique en lecture seule, le dictionnaire privé, en laissant chacun de ses éléments modifiables.
|
|
///
|
|
/// La bonne solution consiste à :
|
|
/// - envelopper (wrapper) le dictionnaire privé avec un ReadOnlyDictionary construit dans le constructeur de MonLit.
|
|
/// - tant qu'en interne, dans la classe MonLit, on ne change pas la référence de mNounoursDico, le wrapper donne accès en lecture seule au dictionnaire
|
|
/// - attention de bien penser à le reconstruire si la référence change !!!
|
|
public class MonLit
|
|
{
|
|
//on veut encapsuler une collection d'un type muable
|
|
private Dictionary<string, Nounours> mNounoursDico = new Dictionary<string, Nounours>
|
|
{
|
|
["Beluga"] = new Nounours(0, "Beluga", new DateTime(2012, 07, 29), 0),
|
|
["Singe"] = new Nounours(1, "Singe", new DateTime(2009, 08, 09), 1345),
|
|
["Girafe"] = new Nounours(2, "Girafe", new DateTime(2007, 11, 02), 567)
|
|
};
|
|
|
|
public ReadOnlyDictionary<string, Nounours> Nounours
|
|
{
|
|
get;
|
|
private set;
|
|
}
|
|
|
|
public MonLit()
|
|
{
|
|
Nounours = new ReadOnlyDictionary<string, Nounours>(mNounoursDico);
|
|
}
|
|
}
|
|
}
|