[C#] Properties (MCAD boek)

Pagina: 1
Acties:

  • gvdh81
  • Registratie: Juli 2001
  • Laatst online: 22-01 09:01

gvdh81

To got or not to got..

Topicstarter
In boek 1 van de MCAD cursus geven ze op pagina 136 een voorbeeld hoe je met properties moet werken.

De gegeven code heb ik wat aangepast zodat het wat compacter is.
code:
1
2
3
4
5
private int mLength;
public int Length {
get { return mLength; }
set { mLength = value; }
}


Nu is mijn vraag;
Als ik de waarde aanpas, bijv:
mLength = 4;

Ziet C# zelf dat hij de "Length" setter moet gebruiken? Of moet ik het bijv. zo doen;
mLength = Length(4);

Dit is namelijk niet geheel duidelijk in het boek en ik heb C# niet bij de hand.

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Properties dienen om interne variabelen (mLength etc) te verbergen en eventueel om extra controles op de waarden te doen die je er in wil stoppen.

Even snel hoe het werkt:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class A {
   private int m_Length;
   public int Length {
       get { return this.m_Length; }
       set { this.m_Length = value; }
   }
}

class B {
    public static void Main(string[] args) {
        A lv_A = new A();
        lv_A.Length = 10;
    }
}


dus ipv lv_A.m_Length = 10 te doen gebruik je nu de property en wordt het dus lv_A.Length

Overigens staat dit volgens mij redelijk duidelijk in het boek.

[ Voor 6% gewijzigd door MTWZZ op 21-04-2006 11:47 ]

Nu met Land Rover Series 3 en Defender 90


  • Vedett.
  • Registratie: November 2005
  • Laatst online: 21-02 17:46
gvdh81 schreef op vrijdag 21 april 2006 @ 11:40:


Nu is mijn vraag;
Als ik de waarde aanpas, bijv:
mLength = 4;

Ziet C# zelf dat hij de "Length" setter moet gebruiken? Of moet ik het bijv. zo doen;
mLength = Length(4);

Dit is namelijk niet geheel duidelijk in het boek en ik heb C# niet bij de hand.
Neen! C# ziet niet automatisch dat mLength = x; hetzelfde is als Length = x; Open je dll maar eens met Lutz's dotNet reflector (http://www.aisto.com/roeder/dotnet/). Daar zal je zien dat :

1) mLength een member is. (die naar goed design private is, en dus niet benaderbaar buiten de class)
2) De Property Length wordt vertaald naar get_Length en set_Length door de c# compiler.

Wat je wel kan is, ook indien de member private is en dat is zeker aan te raden, in de class zelf mLength gebruiken. Maar zo omzeil je wel eventuele logica die je in de Property Length hebt geschreven. Ikzelf probeer altijd gebruik te maken van Properties. Ook in de class zelf.