Questa.NET

Wednesday, August 03, 2005

Safe member

Als je een public property gebruikt voor het modificeren van een private field zal buiten die classe alleen de public property worden gebruikt. Maar intern hoeft dit niet het geval te zijn. Laten we devolgende code als voorbeeld gebruiken:

class Melp
{
   public event EventHandler NaamChanged;
   private string _naam;
   
   public string Naam
   {
      get
      {
         return _naam;
      }
      set
      {
         if( _naam != value )
         {
            _naam = value;
            
            if( NaamChanged != null )
            {
               NaamChanged( this, EventArgs.Empty );
            }
         }
      }
   }
}


Als de Naam property wordt geset met een anderen waarde zal het NaamChanged event worden gegooit. Omdat we een event gooien bij het veranderen van de Naam zullen we intern ook altijd de property Naam te gebruiken ipv de private member _naam alleen is het ook mogelijk om dit niet te doen, wat we niet willen.
We kunnen dit voorkomen om de private member _naam een anderen scope te geven:

class Melp
{
   public event EventHandler NaamChanged;
   
   public string Naam
   {
      string _naam;
   
      get
      {
         return _naam;
      }
      set
      {
         if( _naam != value )
         {
            _naam = value;
            
            if( NaamChanged != null )
            {
               NaamChanged( this, EventArgs.Empty );
            }
         }
      }
   }
}


Zo is _naam veilig en kan niet worden verandert zonder de property te gebruiken.

Ik vind het een mooie oplossing, maar voel er op een of anderen manier nog niet veel voor.

3 Comments:

  • Hey,

    Ik dacht laat ik eens een interessante/inhoudelijke reactie geven op jouw’n log, ahum ;)
    Bedankt voor je reactie!

    Mo

    By Anonymous Monica, at 4:14 PM  

  • Niet om het een of ander, maar ik heb dit eens geprobeerd, en dat kan helemaal niet joh!

    Zou natuurlijk ook raar zijn, omdat je elke keer als je de property in gaat de string _naam opnieuw declareert, en dus de huidige waarde van die property overschrijft. Sterker nog, zodra je de property verlaat ben je die waarde al kwijt.

    By Anonymous Gump, at 1:21 PM  

  • Ja, dit is ook niet iets wat werkt. Ik zou het een goede future vinden voor de een taal (C#).

    Ik moet toegeven dat het niet echt duidelijk overkomt in de blogpost.

    By Blogger PJ. van de Sande, at 1:24 PM  

Post a Comment

<< Home