Otthon / Utasítás / A getterek és a szetterek varázslatok, amelyeknek ismerniük kell a helyüket. Interfész adathalmaz Set Property Shorthand Notation

A getterek és a szetterek varázslatok, amelyeknek ismerniük kell a helyüket. Interfész adathalmaz Set Property Shorthand Notation

Joseph Crawford, az egyik olvasóm elolvasott egy cikket arról, hogy nem szeretek gettereket és szettereket írni, és azt javasolta, hogy használjam a mágikus __get és __set metódust.
Elmondom, miért nem jó ötlet a szokásos módon használni őket. Elmesélek egy történetet is, ahol igazán jól jöttek – statikus típusok létrehozása PHP-ben (dinamikus nyelv).
Azok számára, akik nem ismerik a __get és __set metódusokat, ez két "varázslatos" módszer, amely így működik:
osztály Állat ( függvény __get($property) ( //... ) function __set($property, $value) (//... ) ) $cow = new Animal; $tehén->súly = "1 tonna"; // ugyanaz, mint $tehén->__set("súly", "1 tonna") print $tehén->súly; // ugyanaz, mint a print $cow->__get("súly");

Jellemzően a fenti módszereket használják dinamikus tulajdonságok létrehozására. Milyen következtetést lehet ebből levonni? Ha véletlenszerű tulajdonságokat szeretne létrehozni, csak használjon hash-t (más néven kulcsos tömböt).
Mi a jó a getterekben és a setterekben?
Lássuk:
osztály Állat ( nyilvános $weightInKgs; ) $tehén = új Állat; $tehén->súlyInKgs = -100;

Mi? Negatív súly? Ez a legtöbb szempontból helytelen.
Egy tehén ne legyen kevesebb 100 kg-nál (szerintem:). 1000-en belül elfogadható.
Hogyan biztosíthatjuk ezt a korlátozást?
A __get és a __set használata meglehetősen gyors módszer.
class Animal ( private $properties = array(); public function __get($name) ( if(!empty($this->properties[$name])) ( return $this->properties[$name]; ) else ( throw new Exception("Undefined property ".$name." hivatkozva." ) ) public function __set($name, $value) ( ​​if($name == "weight") ( if($value< 100) { throw new Exception("The weight is too small!") } } $this->tulajdonságok[$név] = $érték;

) ) $tehén = új Állat; $tehén->súlyInKgs = -100; //kivételt dob
Mi van, ha van egy osztályod 10-20 tulajdonsággal, és ellenőrzi őket? Ebben az esetben a bajok elkerülhetetlenek.< 100) { throw new Exception("The weight is too small!") } if($this->nyilvános függvény __set($név, $érték) ( if($name == "súly") ( if($érték

súly != $súly) ( Shepherd::notifyOfWeightChange($tehén, $súly); ) ) if($name == "legs") ( if($value != 4) ( throw new Exception("A lábak száma túl kicsi vagy túl nagy") ) $this->numberOfLegs = $numberOfLegs; $this->numberOfHooves = $számOfLegs; ) if($name == "milkType") ( .... érted... ) $this->properties[$name] = $érték;
)< 100) { throw new Exception("The weight is too small!"); } if($this->Ezzel szemben a getterek és a setterek a legjobbak az adatellenőrzés terén.

class Animal ( privát $súly; privát $numberOfLegs; privát $numberOfHooves; public $becenév; nyilvános függvény setNumberOfLegs($numberOfLegs) ( if ($numberOfLegs != 100) ( dobja new Exception("A lábak száma túl kevés vagy túl big"); ) $this->numberOfLegs = $száma
súly != $súly) ( Shepherd::notifyOfWeightChange($tehén, $súly); ) $this->weight = $súly;
) nyilvános függvény getWeight() ($this->weight; ) )
Semmi sem hasonlítható a C# rövid függvényeihez (get, set;). Valószínű, hogy hamarosan megjelenik egy ilyen támogatás a PHP-ben, de most ne lazítsunk...
Ismétlem, nem igazán én írtam ezeket a gettereket és settereket – a PHP Storm megcsinálta helyettem. Egyszerűen a következőket írtam:
osztály Állat ( privát $súly; privát $numberOfLegs; )

És megnyomta az Alt+Insert -> Getters and setters. A PHPStorm mindent automatikusan generált.
Mostantól a PHP Storm további előnyeként, amikor getterekkel és setterekkel dolgozom, használhatom az automatikus kiegészítési funkciót:

__get esetén nincs ez a lehetőség, csak ezt tudom írni:
$tehén->súly = -100

Most a tehén „súlya” (súly) mínusz 100 kg.
El tudom felejteni, hogy ez a súly kg-ban van, csak írj súlyt és minden menni fog.
Tehát a getterek és a setterek nagyon hasznosak lehetnek (de még mindig ne imádd őket, nem vagy Java programozó). Ha csak ingyenes tulajdonságokat szeretne, használjon egy tömböt:
$tehén = array("súly" => 100, "lábak" => 4);

Ezt a trükköt sokkal könnyebb kihozni, mint a __get and __set.
De ha azt szeretné, hogy az adatok mindig csak érvényes értékeket tartalmazzanak, használjon érvényesítéssel rendelkező settereket. Ha olyan integrált fejlesztői környezettel (IDE) rendelkezik, mint a PHP Storm, akkor imádni fogja a szettereket, mert nagyon könnyen használhatóak. A PHP Storm esetében a $cow->setLegs() helyett elegendő a cosl beírása. Igen, könnyű! Nincs több elírás, és láthatja, hogy a metódus milyen paramétereket vesz igénybe.
A __set metódusnak van egy másik hátránya is. Csak 1 paramétert fogad el. Mi van ha 2 kell? Például, mint itt: $store1->setPrice("item-1", 100). Az üzletben be kell állítani a termék árát. A __set metódus nem teszi lehetővé ezt, de a setter igen.

Interfész megvalósítás Készlet egy rendezetlen gyűjtemény, amely nem tartalmazhat ismétlődő adatokat.

Felület Készlet a következő módszereket tartalmazza:

MódszerLeírás
add (O objektum) Egy elem hozzáadása a gyűjteményhez, ha az hiányzik. Igaz értéket ad vissza, ha az elemet hozzáadták.
addAll (c gyűjtemény) Gyűjteményelemek hozzáadása, ha hiányoznak.
világos() Gyűjtemény törlése.
tartalmaz (O objektum) Egy elem jelenlétének ellenőrzése egy halmazban. Igaz értéket ad vissza, ha az elem megtalálható.
tartalmazza az összeset (c gyűjtemény) Gyűjtemény jelenlétének ellenőrzése egy készletben. Igaz értéket ad vissza, ha minden elemet tartalmaz a halmaz.
egyenlő (O-objektum) Egyenlőségi ellenőrzés.
hashCode() Egy halmaz hashCode-jának lekérése.
isEmpty() Elemek jelenlétének ellenőrzése. Igaz értéket ad vissza, ha nincsenek elemek a gyűjteményben.
iterátor() Funkció gyűjteményiterátor beszerzéséhez.
eltávolítás (O objektum) Elem eltávolítása a halmazból.
távolítsa el az összeset (c gyűjtemény) Eltávolítja az átadott gyűjtemény összes elemét a készletből.
mindent megtart (c gyűjtemény) Az átadott gyűjteményhez nem tartozó elemek eltávolítása.
méret() Gyűjteményelemek száma
toArray() Egy halmaz átalakítása elemek tömbjévé.
toArray(T a) Egy halmaz átalakítása elemek tömbjévé. Az előző metódussal ellentétben, amely Object típusú objektumok tömbjét adja vissza, ez a metódus a paraméterben átadott típusú objektumok tömbjét adja vissza.

Interfész családhoz Készlet tartalmazza HashSet, TreeSetÉs LinkedHashSet. Szettekben Készlet A különböző megvalósítások eltérő sorrendben tárolják az elemeket. A HashSetben az elemek sorrendje a gyors kereséshez van optimalizálva. A TreeSet tároló az objektumokat növekvő sorrendben tárolja. A LinkedHashSet az elemeket a hozzáadás sorrendjében tárolja.

HashSet adatkészlet

HashSet konstruktorok:

// Hozzon létre egy üres halmazt 16-os kezdeti kapacitással és 0,75-ös alapértelmezett terhelési tényezővel public HashSet(); // Halmaz létrehozása gyűjteményelemekből public HashSet(Collection c); // Hozzon létre egy halmazt a megadott kezdeti kapacitással és // az alapértelmezett terhelési tényezővel (0,75) public HashSet(int inicialCapacity); // Hozzon létre egy halmazt a megadott kezdeti kapacitással és // terhelési tényezővel public HashSet(int kezdetiCapacity, float loadFactor);

HashSet metódusok

  • publikus int méret()
  • nyilvános logikai érték isEmpty()
  • nyilvános logikai hozzáadás (O-objektum)
  • public logikai addAll(c gyűjtemény)
  • nyilvános logikai eltávolítás (O-objektum)
  • publikus logikai érték eltávolítása(c gyűjtemény)
  • nyilvános logikai érték tartalmazza (o objektum)
  • public void clear()
  • nyilvános objektum klón()
  • public Iterator iterator()
  • nyilvános objektum toArray()
  • nyilvános logikai érték megtartja az összeset (c gyűjtemény)

HashSet az ArrayListhez hasonló metódusokat tartalmaz. A kivétel az add(Object o) metódus, amely csak akkor ad hozzá egy objektumot, ha az hiányzik. Ha egy objektumot adunk hozzá, az add metódus igaz, egyébként false értéket ad vissza.

Példa a HashSet használatára:

HashSet hashSet = új HashSet (); hashSet.add("Krumpli"); hashSet.add("Sárgarépa"); hashSet.add("Cékla"); hashSet.add("Uborka"); // A következő bejegyzés ne legyen a halmazban hashSet.add("Potatoes"); // A beállított méret kinyomtatása a konzolra System.out.println("HashSet size = " + hashSet.size()); // Iterator bejegyzések nyomtatása a konzolra

Csak 4 bejegyzést kell látnunk a konzolon. Megjegyzendő, hogy a rekordok készlethez való hozzáadásának sorrendje megjósolhatatlan lesz. HashSet hash-t használ a visszakeresés felgyorsítására.

Használati példa HashSet egész értékekkel. A 25 lehetséges véletlenszerűen kiválasztott érték közül 0 és 9 közötti értéket adunk a készlethez - nem lesz duplikáció.

Véletlen véletlen = new Random(30); Készlet iset = új HashSet (); for(int i = 0; i< 25; i++) iset.add(random.nextInt(10)); // Вывести в консоль записи Iterator

Meg kell jegyezni, hogy a végrehajtás HashSet nincs szinkronizálva. Ha egy hash-készlethez egyszerre több szál is hozzáfér, és egy vagy több szálnak módosítania kell a készletet, akkor azt külsőleg szinkronizálni kell. Ezt a legjobb a létrehozáskor megtenni, hogy megakadályozzuk a véletlen, szinkronizálatlan hozzáférést a készlethez:

Készlet set = Collections.synchronizedSet(new HashSet ());

LinkedHashSet adatkészlet

Osztály LinkedHashSetörököl HashSet anélkül, hogy új metódusokat adna hozzá, és a halmaz elemeinek linkelt listáját vezeti be a beillesztés sorrendjében. Ez lehetővé teszi a halmazba történő beillesztés rendezett iterációját.

LinkedHashSet konstruktorok:

// Hozzon létre egy üres halmazt kezdeti kapacitással (16) és alapértelmezett terhelési tényező értékkel (0,75) public LinkedHashSet() // Készítsen halmazt a gyűjtemény elemeiből public LinkedHashSet(Collection c) // Hozzon létre egy halmazt megadott kezdőbetűvel kapacitás és egy tényezőérték alapértelmezett terhelés (0,75) public LinkedHashSet(int kezdeti kapacitás) // Hozzon létre egy halmazt a megadott kezdeti kapacitással és terhelési tényezővel public LinkedHashSet(int kezdeti kapacitás, float loadFactor)

Csak úgy HashSet, LinkedHashSet nincs szinkronizálva. Ezért ha ezt a megvalósítást egy sok szálal rendelkező alkalmazásban használja, amelyek közül néhány módosíthatja a készletet, a szinkronizálást a létrehozási szakaszban kell végrehajtani:

Készlet set = Collections.synchronizedSet(new LinkedHashSet ());

TreeSet adatkészlet

Osztály TreeSet létrehoz egy gyűjteményt, amely egy fát használ az elemek tárolására. Az objektumok tárolása növekvő sorrendben történik.

TreeSet konstruktorok:

// Létrehozunk egy üres fakészletet, elemeinek természetes // sorrendje szerint rendezve TreeSet() // Létrehozunk egy fakészletet, amely a megadott halmazban lévő elemeket tartalmazza, // elemeinek természetes sorrendje szerint rendezve. TreeSet(Gyűjteményc) // Hozzon létre egy üres fakészletet, a következő szerint rendezve: TreeSet(Comparatorösszehasonlító) // Hozzon létre egy fakészletet, amely ugyanazokat az elemeket tartalmazza és // ugyanazt a sorrendet használja, mint a megadott rendezett halmaz TreeSet(SortedSet s)

TreeSet Methods

  • logikai hozzáadás (o objektum)
  • logikai addAll(Gyűjteményc)
  • Objektum mennyezet (O objektum)
  • void clear()
  • TreeSet klón()
  • Összehasonlítóösszehasonlító()
  • logikai érték tartalmazza (o objektum)
  • Iterátor descendingIterator()
  • NavigableSet descendingSet()
  • Objektum először ()
  • Objektum emelet (O objektum)
  • SortedSet fejhallgató (E e)
  • NavigableSet headSet (E e, logikai értékkel együtt)
  • Objektum feljebb (O objektum)
  • logikai érték üres()
  • Iterátor iterátor()
  • Elasz()
  • E alacsonyabb (E e)
  • E pollFirst()
  • E pollLast()
  • logikai eltávolítás (O-objektum)
  • int size()
  • Elosztó spliter()
  • NavigableSet részhalmaz (E-től elemtől, logikai értéktől inkluzív, E-től elemig, logikai értéktől inkluzívig)
  • SortedSet részhalmaz (E elemtől, E elemig)
  • SortedSet farokkészlet (E az elemből)
  • NavigableSet tailSet (E from Element, logikai értékkel együtt)
  • A következő módosított példában a használatból TreeSet Az értékek rendezett formában jelennek meg a konzolon.

    SortedSet treeSet = új TreeSet (); treeSet.add("Cékla"); treeSet.add("Uborka"); treeSet.add("Paradicsom"); treeSet.add("Krumpli"); treeSet.add("Sárgarépa"); // Ez a bejegyzés nem szerepelhet a halmazban. TreSet.add("Potatoes"); // A készlet méretének kinyomtatása a konzolra System.out.println("treeSet size = " + treeSet.size()); // Iterator bejegyzések nyomtatása a konzolra itr = treeSet.iterator(); while (itr.hasNext()) ( System.out.println(itr.next().toString()); ) Véletlenszerű véletlen = new Random(30); SortedSet (); for(int i = 0; i< 25; i++) iset.add(random.nextInt(10)); // Вывести в консоль записи Iteratoriset = új TreeSet

    itr = iset.iterator(); while (itr.hasNext()) ( System.out.println(itr.next().toString()); )

    Utolsó frissítés: 2018.07.29

    A szokásos metódusok mellett a C# nyelv speciális hozzáférési metódusokat is biztosít, amelyeket tulajdonságoknak nevezünk. Könnyű hozzáférést biztosítanak az osztálymezőkhöz, megtudhatják azok értékét vagy beállíthatják azokat.

    A szabványos tulajdonságleírás szintaxisa a következő:

    [access_modifier] return_type custom_name ( // tulajdonságkód )

    Például:

    Class Person ( privát karakterlánc neve; nyilvános karakterlánc Name ( get ( return name; ) set ( name = value; ) ) )

    Ezen a tulajdonságon keresztül szabályozhatjuk a névváltozóhoz való hozzáférést. A szabványos tulajdonságdefiníció get és set blokkokat tartalmaz. A get blokkban visszaadjuk a mező értékét, a set blokkban pedig beállítjuk. Az érték paraméter az átadandó értéket jelenti.

    Ezt a tulajdonságot így használhatjuk:

    Személy p = új Személy(); // A tulajdonság beállítása - a Set blokk aktiválódik // a "Tom" érték a p tulajdonságnak átadott érték.Name = "Tom"; // A tulajdonság értékének lekérése és hozzárendelése egy változóhoz - a Get string personName = p.Name blokk aktiválódik;

    Felmerülhet a kérdés, hogy miért van szükségünk tulajdonságokra, ha ebben a helyzetben boldogulunk a hétköznapi osztálymezőkkel? A tulajdonságok azonban lehetővé teszik további logikák hozzáadását, amelyek szükségesek lehetnek például egy osztályváltozóhoz való érték hozzárendelésekor. Például be kell állítanunk egy életkor-ellenőrzést:

    Osztály Személy ( privát int kor; public int Életkor ( set ( if (érték< 18) { Console.WriteLine("Возраст должен быть больше 17"); } else { age = value; } } get { return age; } } }

    A set és get blokkoknak nem kell egyszerre jelen lenniük egy tulajdonságban. Ha egy tulajdonságot csak egy get blokk definiál, akkor a tulajdonság csak olvasható - megkaphatjuk az értékét, de nem állíthatjuk be. Ezzel szemben, ha egy tulajdonságnak csak beállított blokkja van, akkor ez a tulajdonság csak írható - csak az értéket állíthatja be, de nem kaphatja meg:

    Osztály Személy ( privát karakterlánc név; // csak olvasható tulajdonság public string Név ( get ( return name; ) ) private int age; // csak írható tulajdonság public int Életkor ( set ( kor = érték; ) ) )

    Hozzáférés módosítók

    Hozzáférés-módosítókat nem csak a teljes ingatlanra, hanem az egyes blokkokra is alkalmazhatunk - akár get, akár set:

    Osztály Személy ( privát karakterlánc neve; nyilvános karakterlánc Név ( get ( visszatérési név; ) privát halmaz ( név = érték; ) ) nyilvános személy (karakterlánc neve, int kor) ( Név = név; Életkor = életkor; ) )

    Most már csak ebben az osztályban használhatjuk a zárt halmazú blokkot - metódusaiban, tulajdonságaiban, konstruktorában, de más osztályban nem:

    Személy p = új Személy("Tom", 24); // Hiba – a készletet a privát módosítóval deklaráltuk //p.Name = "János"; Console.WriteLine(p.Name);

    Ha módosítókat használ a tulajdonságokban, számos korlátozást kell figyelembe venni:

      A set vagy get blokk módosítója beállítható, ha a tulajdonság set és get blokkokat is tartalmaz.

      Csak egy set vagy get blokk rendelkezhet hozzáférésmódosítóval, de mindkettő nem

      Egy set vagy get blokk hozzáférés-módosítójának szigorúbbnak kell lennie, mint egy tulajdonság hozzáférés-módosítójának. Például, ha egy tulajdonságnak a módosítója publikus, akkor a set/get blokkban csak a módosítók lehetnek védettek: belső, belső, védett, privát

    Kapszulázás

    Fentebb láttuk, hogy a privát osztályváltozókhoz való hozzáférés a tulajdonságokon keresztül történik. Egy osztály állapotának ilyen módon történő elrejtése a külső interferencia elől a beágyazás mechanizmusát képviseli, amely az objektum-orientált programozás egyik kulcsfogalma. (Érdemes megjegyezni, hogy magának a beágyazás fogalmának is elég sok különböző értelmezése van, amelyek nem mindig fedik át egymást) A privát hozzáférés-módosítók használata megvéd egy változót a külső hozzáféréstől. A hozzáférés szabályozására számos programozási nyelv speciális módszereket, gettereket és settereket használ. A C#-ban szerepüket általában a tulajdonságok töltik be.

    Például van néhány számlaosztály, amelynek van egy összegmezője, amely összeget jelent:

    Osztályszámla (nyilvános int összeg; )

    Mivel az összeg változó nyilvános, a programban bárhol elérhetjük és módosíthatjuk, beleértve az érvénytelen értékeket, például negatívat. Nem valószínű, hogy az ilyen viselkedés kívánatos. Ezért a beágyazást az összeg változóhoz való hozzáférés korlátozására és az osztályon belüli elrejtésére használják:

    Osztályszámla ( privát int sum; public int Sum ( get (return sum;) set ( if (érték > 0) ( sum=value; ) ) ) )

    Automatikus tulajdonságok

    A tulajdonságok szabályozzák az osztály mezőihez való hozzáférést. De mi van akkor, ha egy tucat vagy több mezőnk van, akkor az egyes mezők meghatározása és egy azonos típusú tulajdonság írása unalmas lenne. Ezért az automatikus tulajdonságok hozzáadásra kerültek a .NET-keretrendszerhez. Rövidített nyilatkozatuk van:

    Osztály Személy ( nyilvános karakterlánc Név ( get; set; ) public int Életkor ( get; set; ) public Person (karakterlánc neve, int kor) ( Név = név; Életkor = életkor; ) )

    Valójában itt is jönnek létre a tulajdonságok mezői, csak azokat nem a programozó hozza létre a kódban, hanem a fordító automatikusan generálja a fordítás során.

    Mi az előnye az auto-properties-nek, ha lényegében csak egy automatikusan létrehozott változóhoz férnek hozzá, miért nem érnek el közvetlenül egy változót auto-tulajdonságok nélkül? A helyzet az, hogy szükség esetén bármikor kibővíthetjük az auto-tulajdonságot egy normál tulajdonsággá, és hozzáadhatunk hozzá valamilyen speciális logikát.

    Érdemes megfontolni, hogy nem hozható létre automatikus csak írható tulajdonság, mint a szabványos tulajdonságok esetében.

    Az automatikus tulajdonságokhoz alapértelmezett értékek rendelhetők (automatikus tulajdonságok inicializálása):

    Osztály Személy ( nyilvános karakterlánc Név ( get; set; ) = "Tom"; public int Életkor ( get; set; ) = 23; ) osztály Program ( static void Main(string args) ( Személy személy = új személy(); konzol .WriteLine(person.Name); // Tom Console.WriteLine(person.Age // 23 Console.Read();

    És ha nem adjuk meg a Név és Kor tulajdonságok értékeit a Személy objektumhoz, akkor az alapértelmezett értékek lesznek érvényesek.

    Az automatikus tulajdonságok hozzáférésmódosítókkal is rendelkezhetnek:

    Osztály személy ( nyilvános karakterlánc Név ( magánkészlet; get;) nyilvános személy (n karakterlánc) ( Név = n; ) )

    Eltávolíthatjuk a beállított blokkot, és az auto tulajdonságot csak olvashatóvá tehetjük. Ebben az esetben ennek a tulajdonságnak az értékének tárolásához implicit módon létrejön egy mező a csak olvasható módosítóval, így figyelembe kell venni, hogy az ilyen get-tulajdonságok akár az osztálykonstruktorból is beállíthatók, mint a példában fent, vagy a tulajdonság inicializálásakor:

    Osztály személy (nyilvános karakterlánc Név ( get;) = "Tom")

    Tulajdonságok gyorsírása

    A metódusokhoz hasonlóan a tulajdonságokat is lerövidíthetjük. Például:

    Class Person (privát karakterlánc neve; // egyenértékű a nyilvános karakterlánc névvel ( get ( return name; ) ) public string Name => name; )

    A mezők használatának szabályozásához beszerzési és beállítási módszereket hozhat létre, és nyilvánossá teheti azokat. Lehetővé teszik a mezőhöz való hozzáférés szabályozását. Ugyanakkor érdemesebb az Age mezőt priváttá tenni, hogy az osztályon kívül ne lehessen közvetlenül elérni.

    nyilvános osztályú fiók

    privát int kor;

    nyilvános int GetAge()

    ezt adja vissza.kor;

    public void SetAge(int inAge)

    if ((inAge > 0) && (inAge< 120))

    this.age = életkor;

    Most már tudjuk szabályozni a hozzáférést a területünkhöz, de ehhez sok további kód megírása szükséges. Az életkor értékének eléréséhez meg kell hívnia a létrehozott metódusokat:

    Account s = new Account();

    Console.WriteLine("Kor: " + s.GetAge());

      1. A Tulajdonságok használata

    A tulajdonságok megkönnyítik az adatkezelést. Az Életkor tulajdonság a következőképpen deklarálható:

    nyilvános osztályú fiók

    private int ageValue;

    if ((érték > 0) && (érték< 120))

    ageValue = érték;

    return ageValue;

    Itt a korérték egy tulajdonság. Az ingatlan értékének írásához és olvasásához szakaszokat deklarál. Az ezekben a szakaszokban leírt műveletek egyenértékűek a korábban leírt módszerekkel. Ebben az esetben a tulajdonságok ugyanúgy használatosak, mint a normál mezők:

    Account s = new Account();

    Console.WriteLine("Kor: " + s.Age);

    Amikor az Életkor tulajdonság értékre van állítva, a beállított szakaszkód meghívódik. Az érték kulcsszó a tulajdonsághoz rendelt értéket jelöli. Az Age tulajdonság értékének kiolvasásakor a get szakasz kódja hívódik meg. Ez a megközelítés egyesíti a metódusok használatának előnyeit, és lehetővé teszi, hogy a tulajdonságokkal olyan egyszerűen dolgozzon, mint az osztálymezőkkel.

    Az adatok helyességének ellenőrzése a tulajdonságokban . Ha érvénytelen életkor értéket próbál meg beállítani (például 150), akkor a fenti kód érvényességi ellenőrzést végez, és elutasítja az értéket (120 év felett senkinek nem lehet számlája bankunknál), így az öregségi érték megmarad. Az egyetlen módja annak, hogy megtudja, hogy egy tulajdonsághoz van-e érték hozzárendelve, ha a művelet után ellenőrzi a tulajdonság értékét:

    Account s = new Account();

    int newAge = 150;

    if (s.Age != newAge)

    Console.WriteLine("Az életkor értéke nincs beállítva");

    A következő kód érvénytelen 150-es értékre próbálja beállítani az életkort, majd ellenőrzi, hogy ez az érték be lett-e állítva. Ha a Set metódust használták az érték hozzárendelésére, akkor visszaadhatja az értéket hamis Ha ez nem sikerül, akkor a tulajdonság használata egy kis plusz munkát igényel a felhasználótól.

    Különböző módok az ingatlanértékek olvasására. A tulajdonságok lehetővé teszik más hasznos műveletek végrehajtását.

    nyilvános int AgeInMonths

    ezt adja vissza.ageValue * 12;

    Az új AgeInMonths tulajdonság leírása itt található. Csak olvasható, mert nem tartalmaz beállított részt. Az életkor értéket adja vissza hónapokban, ugyanazt az értéket használja, mint az Age tulajdonság. Ez azt jelenti, hogy több különböző módszert is használhat ugyanazon érték elérésére. Lehetőség van írásvédett tulajdonságok létrehozására anélkül, hogy közvetlenül módosítani lehetne őket, valamint csak írható tulajdonságokat, bár ez utóbbiakat ritkán használják.

    A vizuális elemek tulajdonságai . A bankszámla leírásában célszerű tulajdonságokat használni, ahol az objektumokban lévő adatokat kell védeni. De Silverlightban bármilyen szöveget beírhatunk egy TextBlock elembe, és úgy tűnik, nincs szükség a beírt érték érvényességének ellenőrzésére. A kód futtatása lelassítja az értékbeviteli folyamatot. Tehát, ha a Szöveg értéket nyilvános karakterláncsá teszi, a program kevesebb kódot tartalmazna, és gyorsabban futna.

    De amikor megváltoztatjuk a szöveget a TextBlock elemben, azt szeretnénk, hogy a Silverlight oldalon lévő szöveg is megváltozzon, például amikor az Adder program megjeleníti az eredményt. Ha a program egyszerűen megváltoztatja a mező értékét, a Silverlight nem tudhatja, hogy a képernyőn megjelenő üzenetet frissíteni kell.

    Ha azonban a Szöveg tulajdonságot állít be, akkor a TextBlock elem értékének frissítésekor a megfelelő metódus fut le, amely frissítheti a szövegdoboz tárolt értékét, és meghívhat egy metódust a képernyő frissítéséhez, hogy megjelenítse az új értéket. A tulajdonságok lehetővé teszik egy objektum manipulálását, ha annak értéke megváltozik. Egyszerű működés:

    resultTextBlock.Text = "0";

    több száz C# műveletet eredményezhet, mivel az új érték TextBlock elemben való tárolása elindítja a képernyőkép frissítésére szolgáló műveleteket.