Getsuyodev, Programming is mainly used when constructing an application. Programming requires knowledge of application domains, algorithms, and programming language expertise. Programming can be developed in different logic based on developer knowledge.

POO – Struct passé par valeur uniquement

Programmez en orienté objet en C Sharp



Objectif : Implémenter une date (année, mois) par un type valeur Struct, et le passer en paramètre dans une méthode en essayant de le modifier directement.

Le type DateStruct :

struct  DateStruct  {
     private string  FAnnee ;
     private string  FMois ;
     // constructeur : 
     public  DateStruct( string  an,  string  mois)   {    }

     public string  Annee    {
       get {  return  FAnnee; }
       set {  FAnnee = value;   }
     }
    public string  Mois  {
      get {  return  FMois ; }
      set { FMois = value; }
    }
 }

On donne la classe UseDateStruct qui permet de manipuler un objet de type DateStruct :

class  UseDateStruct   {
   public string  siecle( DateStruct dat)
   {
        if  (Convert.ToInt32(dat.Annee) > 2000 )
           return  dat.Annee+ " = 21 ème siécle" ;
        else
           return  dat.Annee+ " = 20 ème siécle" ;
     }
    public void  modifDate_1( DateStruct dat)   {
        dat.Annee = Convert.ToString(Convert.ToInt32(dat.Annee)+10);
    }

 }

Question :
Comme le passage d’un objet de type Struct s’effectue par valeur, cet objet étant présent dans la pile, vérifiez en exécutant le programme dont vous pouvez charger le code ci-dessous, que la méthode public void  modifDate_1( DateStruct dat)  ne modifie pas la valeur du champ Annee du  DateStruct .

Proposez alors, une autre méthode “modifDate_2” qui permettrait de modifier effectivement le DateStruct passé en paramètre et testez-la :

using System;

struct DateStruct
{
private string FAnnee ;
private string FMois ;
public DateStruct(string an, string mois)
{
FAnnee = an;
FMois = mois;
}
public string Annee 
{
get 
{
return FAnnee;
}
set 
{
FAnnee=value;
}
}
public string Mois 
{
get 
{
return FMois ;
}
set 
{
FMois = value;
}
}
}

class UseDateStruct
{
public string siecle( DateStruct dat)
{
if (Convert.ToInt32(dat.Annee) > 2000 )
return dat.Annee+" = 21 ème siécle";
else
return dat.Annee+" = 20 ème siécle";
}
public void modifDate_1( DateStruct dat)
{
dat.Annee = Convert.ToString(Convert.ToInt32(dat.Annee)+10);
}
}

class Application
{
static void Main(string[ ] args)
{
DateStruct date = new DateStruct("1996","octobre");
UseDateStruct testDate = new UseDateStruct( );

System.Console.WriteLine("date.Annee = "+date.Annee+" , date.Mois = "+date.Mois);
System.Console.WriteLine( testDate.siecle(date) ); 

testDate.modifDate_1(date);
System.Console.WriteLine("date.Annee = "+date.Annee+" , date.Mois = "+date.Mois);

System.Console.ReadLine( );
}
}

Comments are closed, but trackbacks and pingbacks are open.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More