Calendrier

Novembre 2009
L M M J V S D
            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            
<< < > >>

Présentation

Recherche

W3C

  • Flux RSS des articles

C# 1.0

tss tss tss Parfois je me demande à quoi pense Microsoft quand même

Parfois on a besoin qu'une variable n'ai pas de valeur reste vide,

 comme souvent c'est le cas pour une application accèdant à une base de données dès l'instant ou certains champs d'une table doivent pouvoir accepter les valeurs nulles

Certes Microsoft a sorti les nullables en .NET 2.0

mais pour .NET 1.0 cela peut se révéler de la vraie bidouille j'ai essayeéde développer ces deux structures pour int et DateTime (basées sur ce que j'ai vu dans un webcast  de mitsuru Furuta et sur l'implémentation dans le framework .NET 2.0 des Nullables<>)

mais j'avoue quand même que parfois je me demande à quoi pense Microsoft, car certes Linq ,WPF,etc. sont trés stimulants mais je suis étonné parfois comme de simples petits problêmes n'ont en fait pas de solutions, ou comment on peut peiner pour résoudre des actions de bases ...

///<summary>
    ///
    ///</summary>
    public struct intNullable
    {
        private int _Value;
        private bool _HasValue;
 
        public intNullable(int value)
        {
            this._Value = value;
            this._HasValue = true;
        }
 
        public int Value
        {
            get { return _Value; }
            set { _Value = value; }
        }
        public bool HasValue
        {
            get { return _HasValue; }
        }
 
        public static implicit operator int(intNullable i)
        {
            return i.Value;
        }
        public static implicit operator intNullable(int i)
        {
            return new intNullable(i);
        }
        public void ClearValue()
        {
            this._Value =0;
            this._HasValue = false;
        }
        public override string ToString()
        {
            if (this.HasValue==false)
            {
                return string.Empty;
            }
            return this.Value.ToString();
        }
    }
    ///<summary>
    ///
    ///</summary>
    public struct DateTimeNullable
    {
        private DateTime _Value;
        private bool _HasValue;
 
        public DateTimeNullable(DateTime value)
        {
            this._Value = value;
            this._HasValue = true;
        }
 
        public DateTime Value
        {
            get { return _Value; }
            set { _Value = value; }
        }
        public bool HasValue
        {
            get { return _HasValue; }
        }
 
        public static implicit operator DateTime(DateTimeNullable d)
        {
            return d.Value;
        }
        public static implicit operator DateTimeNullable(DateTime d)
        {
            return new DateTimeNullable(d);
        }
        public void ClearValue()
        {
            this._Value = new DateTime();
            this._HasValue = false;
        }
        public override string ToString()
        {
            if (this.HasValue == false)
            {
                return string.Empty;
            }
            return this.Value.ToString();
        }
    }

 

Pour l'accés aux données (ADO.NET) ,il est également possible tout simplement d'utiliser un object pour les champs pouvant être null

ainsi on pourra affecter

object  uneVariable = System.Convert.DBNull;

mais cela reste du bidouillage je trouve et aucune de ses solutions ne me satisfait

Par Romagny13
Ecrire un commentaire - Voir les 0 commentaires - Recommander
System.Collections.CollectionBase
Collection d’éléments en .net 1.x
 
1 la classe collection
 
using System;
 
namespace Test
{
     
      public class CONTACTS:System.Collections.CollectionBase
      {
            public CONTACTS()
            {
                 
            }
 
            public void Add(CONTACT oCONTACT)
            {
            this.List.Add(oCONTACT);
            }
            public CONTACT this[int index] 
            {
                  get 
                  {
                        return( (CONTACT) List[index] );
                  }
                  set 
                  {
                        List[index] = value;
                  }
            }
 
      }
}
 
2 la classe unitaire
using System;
 
namespace Test
{
      ///<summary>
      /// Description résumée de CONTACT.
      ///</summary>
            public class CONTACT
      {
            //
            // MEMBRES
            //
            private Int32 m_code_contact;
            private String m_nom_contact;
            private String m_prenom_contact;
 
            //
            // CONSTRUTEURS
            //
            public CONTACT()
            {
            }
 
 
            public CONTACT(Int32 code_contact,String nom_contact,String prenom_contact,)
            {
                  this.code_contact = code_contact;
                  this.nom_contact = nom_contact;
                  this.prenom_contact = prenom_contact;
            }
 
            //
            // PROPERTYS
            //
            public Int32 code_contact
            {
                  get
                  {
                        return m_code_contact;
                  }
                  set
                  {
                        m_code_contact = value;
                  }
            }
 
            public String nom_contact
            {
                  get
                  {
                        return m_nom_contact;
                  }
                  set
                  {
                        m_nom_contact = value;
                  }
            }
            public String prenom_contact
            {
                  get
                  {
                        return m_prenom_contact;
                  }
                  set
                  {
                        m_prenom_contact = value;
                  }
            }
           
           
      }
}
 
 
3 lecture  écriture dans la collection de contacts
                  CONTACTS ListContacts;
                  ListContacts=new CONTACTS();
 
                  // on definit un contact
                  CONTACT oCONTACT;
                  oCONTACT=new CONTACT();
                  oCONTACT.code_contact=1;
                  oCONTACT.nom_contact="rom";
                  // ajout a la collection des contacts
                  ListContacts.Add(oCONTACT);
 
 
                 // AFFICHAGE DANS UN DATAGRID
                  dataGrid1.DataSource=ListContacts;
                 // ACCES AUX MEMBRES
                 textbox1.Text = ListContacts[0].nom_contact;
 
 

 

maintenant on peut trés bien imaginer par exemple que le contact ait  :

- un TYPE de contact (relation 0,1 ou 1,1 ) > un contact a un type de contact

dans ce cas dans la classe unitaire on aura

TYPE_CONTACT oTYPE_CONTACT; ou simplement String sType_contact;

+ accesseur + initialisation dans le constructeur

- une collection de livres (relation  0,n  ou 1,n),... un contact a 0 ou plusieurs livres

dans ce cas cette collection sera ajoutée dans la classe unitaire (declaration d'un objet de la collection livres ) :

LIVREs ListLIVREs;

la classe collection aura comme la classe CONTACTS ci dessus les methodes ADD et this pour lire

et on accédera ainsi "par escalier"

ListContacts[0].ListLIVREs.Add(oLIVRE);

 et ainsi de suite

 

Tous les membres

http://msdn2.microsoft.com/en-us/library/system.collections.collectionbase_members.aspx

 

 

Par Romagny13
- Voir les 0 commentaires - Recommander
Créer un blog sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus