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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
namespace csq001
{
// Classe à sémantique de valeur.
// (pas pas une Struct !! sinon le problème ne se pose plus)
class Data
{
public Data() {}
public Data(int aValue) { mValue = aValue; }
public Data(Data aData) { mValue = aData.mValue; }
private int mValue = 0;
}
// Class qui presente une valeur (set)
class Presenter
{
public Presenter(int aValue) { mData = new Data(aValue); }
public Data Value
{
// Accesseur
// Création d'une copie pour protéger
// l'attribut privé.
get { return new Data(mData); }
}
private Data mData;
}
// Classe a qui on fournit une valeur (get)
class User
{
public Data Value
{
// Accesseur
// Création d'un copie pour protéger
// le fournisseur et remplacer l'ancienne instance par la nouvelle.
set { mData = new Data(value); }
}
private Data mData = new Data();
}
class Program
{
static void Main(string[] args)
{
Presenter lPresenter = new Presenter(27);
User lUser = new User();
// A ce point
// lPresenter.mData.mValue vaut 27
// lUser.mData.mValue vaut 0
lUser.Value = lPresenter.Value;
// A ce point
// lPresenter.mData.mValue vaut 27
// lUser.mData.mValue vaut 27
// C'est ce qui est voulu.
}
}
} |