using System;
using System.Text;


namespace ExempleCopieParValeur
{
    // Type crée par l'ulisateur
    // Exemple 1: creation du type UnInt par le biais d'une classe
    class UnInt
    {
        public int _varClasse = 10;
    }
    // Exemple 2: creation du type StructAmoi par le biais d'une structure
    struct StructAmoi
    {
        public int _varStruct;
    }
    class Program
    {
        static void Main(string[] args)
        {
            //demo  copie par valeur de données
            int y = 20;
            int z = 5;
            z = y; // copie par valeur
            y = 40;
            Console.WriteLine("z="+z); // z non modifié : affiche 20 => 2 objets indépendants

            //demo  copie de références
            UnInt x;
            UnInt w;
            x = new UnInt();
            w = x;
            x._varClasse = 20;
            Console.WriteLine("w._varClasse="+w._varClasse); // w aussi a été modifié. Normal: 1 seul objet crée mais 2 références!

            //demo  copie de références
            StructAmoi varstruct1=new StructAmoi();
            varstruct1._varStruct = 1000;
            StructAmoi varstruct2;
            varstruct2 = varstruct1;
            varstruct1._varStruct = 2000;
            Console.WriteLine("varstruct2._varStruct " + varstruct2._varStruct); // varstruct2 non modifié => 2 objets indépendants

            Console.ReadKey();
        }
    }
}
