Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
18
|Rozdział1:Pracaztypamidanych
Wartośćzmienneja1jestwjednymzdwóchstanów:albozawieraoryginalną
lokalizacjęwAnytown,albouaktualnionąwAnnArbor.Niemodyfikuje-
myistniejącegoadresu,tworzącdowolnyznieprawidłowychtymczasowych
stanów,pokazanychwpoprzednimprzykładzie.Tepośredniestanyistnieją
tylkowczasiewykonywaniakonstruktoraAddressiniewidocznespoza
tegokonstruktora.GdytylkonowyobiektAddresszostanieskonstruowany,
jegowartośćjestustalonanacałyczas.Kodtenjestrównieżbezpiecznyze
względunawyjątki:a1jestalbowswoimoryginalnymstanie,albomanową
wartość.Jeśliwyjątekzostaniezgłoszonypodczaskonstruowanianowego
obiektuAddress,oryginalnawartośća1jestniezmieniona.
Abyutworzyćtypniezmienny,musimyzapewnić,żenaszkodniezawiera
żadnychluk,którepozwoliłybykodowiklienckiemuzmieniaćstanwewnętrz-
ny.Typywartościoweniewspierajątypówpochodnych,zatemniemusimy
zabezpieczaćsięprzedmożliwościąmodyfikowaniapólprzeztypypochodne.
Zamiasttegomusimyzwrócićuwagęnadowolnepolawtypieniezmien-
nym,którezmiennymitypamireferencyjnymi.Przyimplementowaniu
konstruktorówdlatychtypówkoniecznejestwykonanieochronnejkopii
tegozmiennegotypu.Wszystkiekolejneprzykładyzakładają,że
Phone
jest
niezmiennymtypemwartościowym,gdyżzajmujemysiętylkoniezmiennością
typówwartościowych:
//Prawieniezmienny:tuluki,którepozwalająnazmianystanu.
publicstructPhoneList
{
privatereadonlyPhone[]phones;
publicPhoneList(Phone[]ph)
{
phones:ph;
}
publicIEnumerable<Phone>Phones
{
get{returnphones;}
}
}
Phone[]phones:newPhone[10];
//Inicjowaniezmiennejphones
PhoneListpl:newPhoneList(phones);