ZaΦßteΦnφk

PokroΦil²

Profesionßl

Prostor pro experimentovßnφ

Programßtorskß laborato°

 

Budete pot°ebovat p°ibli₧n∞ 65 minut

OperaΦnφ systΘm pou₧it² v p°φsp∞vku: Window 2000

V²vojovΘ nßstroje: Visual Studio .NET

 

 

 

Vizußlnφ zp∙sob p°idßvßnφ komentß°∙

Oz°ejmenφ prßce konstruktoru a destruktoru

Tvorba p°etφ₧enΘho konstruktoru

 

 

Vizußlnφ zp∙sob p°idßvßnφ komentß°∙

 

Smysl pou₧itφ komentß°∙ jsme si ji₧ vysv∞tlovali a tedy nenφ ani nejmenÜφch pochyb o tom, zdali byste je m∞li ve svΘm zdrojovΘm k≤du pou₧φvat. V tomto tipu si ovÜem ukß₧eme, jak p°idat komentß°, a to pln∞ vizußlnφ cestou, tedy bez toho, abyste museli zapsat symbol apostrofu, nebo textov² °et∞zec REM. Postupujte podle nφ₧e uveden²ch instrukcφ:

 

  1. Otev°ete vßÜ projektov² soubor ve Visual Basicu .NET.
  2. P°idejte do k≤du komentß°e a prozatφm ignorujte skuteΦnost, ₧e je editor zv²raz≥uje vlnovkou modrΘ barvy.
  3. Ujist∞te se, ₧e je zobrazen panel s tlaΦφtky s nßzvem Text Editor. Nenφ-li tomu tak, klepn∞te prav²m tlaΦφtkem myÜi na standardnφm panelu s tlaΦφtky a aktivujte polo₧ku Text Editor. Na panelu nßs budou zajφmat p°edevÜφm dv∞ tlaΦφtka: Comment out the selected lines û pro p°idßnφ komentß°∙ a Uncomment the selected lines û pro odstra≥ovßnφ ji₧ vytvo°en²ch komentß°∙ (obr. 1).

 

 

Obr. 1 û Podoba panelu Text Editor

á

  1. Vyberte °ßdky se zapsan²m textem do bloku a klepn∞te na tlaΦφtko Comment out the selected lines. VybranΘ °ßdky se rßzem prom∞nφ na komentß°e (bude p°ed n∞ umφst∞n symbol apostrofu a barva textu se zm∞nφ na zelenou).

 

Zde p°edstavenß technika najde uplatn∞nφ zejmΘna p°i tzv. hromadnΘm p°idßvßnφ komentß°∙, ovÜem vyu₧φt je m∙₧ete i v situaci, kdy budete chtφt zamezit provßd∞nφ jistΘho fragmentu zdrojovΘho k≤du aplikace a nebude se vßm chtφt p°idßvat symbol apostrofu na ka₧d² °ßdek s k≤dem. JednoduÜe vyberte vÜechen k≤d do bloku a klepn∞te na vzpomφnanΘ tlaΦφtko pro jeho prom∞nu na komentß°. Budete-li chtφt komentß°e odstranit, postupujte analogicky, jenom po vybrßnφ bloku textu klepn∞te na tlaΦφtko Uncomment the selected lines.

 

Zp∞t na obsah

 

Oz°ejmenφ prßce konstruktoru a destruktoru

 

Pojmy konstruktor a destruktor jsou pro programßtory ve Visual Basicu .NET novΘ, a proto bude dobrΘ, kdy₧ si je p°edstavφme. Konstruktor si m∙₧ete p°edstavit jako prvnφ metodu, kterß je podrobena exekuci v okam₧iku vytvo°enφ objektu. Ano, pou₧itφ konstruktoru a poslΘze takΘ destruktoru spadß do problematiky objektov∞ orientovanΘho programovßnφ, a proto p°edpoklßdßm, ₧e vßm tato oblast programovßnφ nenφ ·pln∞ cizφ.

 

Konstruktor je aktivovßn v₧dy p°i zrozenφ objektu jako platnΘ instance t°φdy. Tento okam₧ik je velmi vhodn² pro jistΘ poΦßteΦnφ prßce, jako je nap°φklad inicializace datov²ch Φlen∙ t°φdy. Konstruktor nikdy nevracφ hodnotu a m∙₧e b²t p°etφ₧en (to znamenß, ₧e m∙₧ete vytvo°it n∞kolik variant konstruktoru se stejn²m jmΘnem, ovÜem jinou sadou parametr∙).áá

 

Ve Visual Basicu .NET mß konstruktor v₧dy podobu procedury typ Sub s nßzvem New. Procedura m∙₧e b²t bezparametrickß, nebo m∙₧e takΘ obsahovat jeden, nebo i n∞kolik parametr∙. Na nastßvajφcφ ukßzce si budeme demonstrovat pou₧itφ konstruktoru v praxi.

 

Postupujte takto:

 

  1. Vytvo°te novou aplikaci pro Windows (Windows Application).
  2. Otev°ete nabφdku Project a klepn∞te na polo₧ku Add Class.
  3. P°idejte do projektu soubor s k≤dem pro t°φdu (soubor m∙₧ete nechat implicitn∞ pojmenovan²).
  4. Nßzev t°φdy zm∞≥te na T°φda1.
  5. Nynφ otev°ete otevφracφ seznam, jen₧ ukr²vß metody vytvo°enΘ t°φdy. Otevφracφ seznam s metodami t°φdy se nachßzφ na pravΘ stran∞ okna editoru pro zßpis programovΘho k≤du. Po otev°enφ klepn∞te na metodu s nßzvem New (obr. 2).ááá

 

 

Obr. 2 û V²b∞r metody New

 

  1. Do k≤du t°φdy se automaticky p°idß k≤d metody New, neboli konstruktoru tΘto t°φdy:

 

Public Class T°φda1

ááá Public Sub New()

 

ááá End Sub

End Class

 

Standardn∞ je konstruktor definovßn jako metoda s ve°ejn²m p°φstupem a prßzdn²m seznamem parametr∙. Zßsadnφ v²znam mß zde prßv∞ ona äve°ejnostô konstruktoru, kterß dovoluje, aby byl k≤d konstruktoru vykonßn a instance t°φdy zrozena. Jestli₧e by byl konstruktor definovßn s modifikßtorem Private, nebylo by mo₧nΘ vytvß°et instance danΘ t°φdy.

 

Abyste se p°esv∞dΦili, ₧e konstruktor odvßdφ svou prßci p°i tvorb∞ objektu, napiÜte do procedury New tento °ßdek k≤du:

 

ááááááá MessageBox.Show("Toto je zprßva z konstruktoru.")

 

Po vytvo°enφ objektu bude proveden k≤d konstruktoru, a tedy na obrazovce poΦφtaΦe uvidφte text tΘto zprßvy. P°idejte na formulß° jednu instanci ovlßdacφho prvku Button a do t∞la jejφ udßlostnφ procedury Click zapiÜte k≤d pro vytvo°enφ instance t°φdy T°φda1:

 

ááááááá Dim Objekt_01 As New T°φda1()

 

Jak jist∞ vφte, instance t°φdy se vytvß°φ pou₧itφm klφΦovΘho slova New a zadßnφm specifikace t°φdy. Po spuÜt∞nφ aplikace a klepnutφ na tlaΦφtko bude zobrazeno okno se zprßvou, kterΘ dokazuje, ₧e konstruktor odvßdφ svou prßci dokonale. OvÜem uveden² p°φklad je vskutku trivißlnφ a jeho praktickΘ vyu₧itφ tak°ka minimßlnφ. Proto se poj∩me podφvat na pon∞kud slo₧it∞jÜφ uplatn∞nφ konstruktoru.

 

V dalÜφm p°φkladu si ukß₧eme, jak pou₧φt konstruktor na vytvo°enφ novΘ instance formulß°e a jak p°idat na plochu tΘto novΘ instance instanci ovlßdacφho prvku Button. Rovn∞₧ tak nßm t∞lo konstruktoru poslou₧φ na inicializaci hodnot vÜech pot°ebn²ch vlastnostφ a na aktivaci ₧ßdan²ch metod. Zajφmavostφ bude skuteΦnost, ₧e p∙jde o parametrick² konstruktor. Parametr konstruktoru bude p°ijφmat textov² °et∞zec, jen₧ bude pozd∞ji pou₧it jako popisek u vytvo°enΘ instance tlaΦφtka. Upravte k≤d t°φdy podle tohoto vzoru:

 

Public Class T°φda1

ááá Public Sub New(ByVal PopisekTlaΦφtka As String)

ááááááá Dim Formulß° As New Form()

ááááááá Dim TlaΦφtko As New Button()

ááááááá With TlaΦφtko

ááááááááááá .Location = New Point(10, 30)

ááááá áááááá.Height = 100

ááááááááááá .Width = 200

ááááááááááá .Text = PopisekTlaΦφtka

ááááááá End With

 

ááááááá With Formulß°

ááááááááááá .Text = "Konstruktorem vytvo°en² formulß°."

ááááááááááá .MinimizeBox = True

ááááááááááá .MaximizeBox = False

ááááááááááá .Controls.Add(TlaΦφtko)

ááááááááááá .Show()

ááááááá End With

ááá End Sub

End Class

 

Pro vytvo°enφ instance t°φdy Form a instance t°φdy Button v k≤du konstruktoru, je zapot°ebφ, aby byl do projektu za°azen odkaz na jmenn² prostor System.Windows.Forms.

 

V p°φpad∞ aplikace typu Windows je tento po₧adavek spln∞n, proto₧e odkaz na jmenn² prostor System.Windows.Forms je do projektu za°azen ihned p°i jeho vytvo°enφ. Odkaz se nachßzφ v uzlu References, kter² m∙₧ete najφt ve stromovΘ struktu°e okna Solution Explorer. á

 

Dßle si vÜimn∞te zejmΘna signaturu konstruktoru. Je zde deklarovßn parametr datovΘho typu String s nßzvem PopisekTlaΦφtka, kterΘmu bude argument p°edßn hodnotou, co₧ indikuje pou₧itφ klφΦovΘho slova ByVal.á

 

V t∞le konstruktoru se d∞je mnoho v∞cφ:

 

 

P°emφst∞te se do udßlostnφ procedury Button1_Click tlaΦφtka, kterΘ se nachßzφ na formulß°i. Zde zadejte k≤d pro vytvo°enφ objektu s parametrick²m konstruktorem:

 

ááááááá Dim Objekt_01 As New T°φda1("Toto je moje tlaΦφtko.")

 

Po spuÜt∞nφ aplikace a klepnutφ na tlaΦφtko se zobrazφ novΘ dialogovΘ okno formulß°e, kterΘ bude obsahovat jedno tlaΦφtko (obr. 3).

 

 

Obr. 3 û Ukßzka prßce konstruktoru v akci

 

Destruktor si zase m∙₧ete p°edstavit jako poslednφ metodu, kterß je aktivovßna p°ed kompletnφ terminaci instance t°φdy. Destruktor je tedy jak²msi prot∞jÜkem konstruktoru. Destruktor se ve Visual Basicu .NET naz²vß finalizer a je reprezentovßn procedurou typu Sub s nßzvem Finalize. Tato procedura mß nßsledujφcφ podobu:

 

ááá Protected Overrides Sub Finalize()

ááááááá MyBase.Finalize()

ááá End Subááá

á

Jak vidφte, procedura je deklarovßna s modifikßtory Protected a Overrides. Modifikßtor Protected urΦuje, ₧e procedura je p°φstupna pouze z t°φdy, ve kterΘ je deklarovßna a takΘ z jakΘkoliv odvozenΘ t°φdy z danΘ t°φdy. Pou₧itφ modifikßtoru Overrides na°izuje, aby se p°ed terminacφ objektu pou₧ila procedura danΘ t°φdy a ne stejnojmennß procedura, kterß se nachßzφ v bßzovΘ t°φd∞ (jde o tzv. p°ekrytφ Sub procedury).

 

V t∞le destruktoru se nachßzφ jenom jeden °ßdek, kter² zabezpeΦuje volßnφ metody Finalize bßzovΘ t°φdy, co₧ naznaΦuje pou₧itφ klφΦovΘho slova MyBase.

 

Bßzovß (zßkladnφ) t°φda je v tomto p°φpad∞ t°φda System.Object. T°φda System.Object obsahuje proceduru Sub Finalize, kterß m∙₧e b²t v odvozen²ch t°φdßch p°ekryta (tuto skuteΦnost naznaΦuje pou₧itφ modifikßtoru Overridable v deklaraΦnφm p°φkazu tΘto procedury). áá

 

Proto₧e je management pam∞ti v kompetenci Garbage Collection, nelze p°edem odhadnout, kdy k exekuci finalizeru dojde (jde o tzv. nedeterministickou finalizaci instancφ t°φd).

 

Budete-li chtφt zjistit, kdy se k≤d finalizeru provßdφ, upravte metodu Finalize tφmto zp∙sobem:

 

ááá Protected Overrides Sub Finalize()

ááááááá MessageBox.Show("Prßv∞ se provßdφ k≤d destruktoru t°φdy.")

ááááááá MyBase.Finalize()

ááá End Sub

 

Spus¥te aplikaci, klepn∞te na tlaΦφtko a zobrazte nov² formulß°. PotΘ zav°ete nov² a takΘ standardnφ formulß°. Ve chvφli, kdy bude procesor zpracovßvat k≤d finalizeru, bude zobrazeno okno se zprßvou.

 

Zp∞t na obsah

 

Tvorba p°etφ₧enΘho konstruktoru

 

Konstruktoru t°φdy se °φkß, ₧e je p°etφ₧en², jestli₧e existuje n∞kolik alternativ konstruktoru, kterΘ sice majφ stejnΘ jmΘno, ovÜem liÜφ se seznamem parametr∙. P°i vytvß°enφ objektu je potom jenom na programßtorovi, kter² konstruktor se rozhodne pou₧φt. Programov² k≤d t°φdy s p°etφ₧en²m konstruktorem m∙₧e mφt t°eba tuto podobu:

 

Public Class A

ááá Public Sub New(ByVal Textov²╪et∞zec As String)

ááááááá MessageBox.Show("PoΦet znak∙ v °et∞zci: " & _

ááááááá Len(Textov²╪et∞zec))

ááá End Sub

 

ááá Public Sub New(ByVal Koeficient As Double)

ááááááá Dim x As Double

ááááááá x = (Koeficient * 1.27) / 0.05

ááááááá MessageBox.Show("Hodnota v²poΦtu s pou₧itφm koeficientu: " & _

ááááááá x.ToString)

ááá End Sub

 

ááá Public Sub New(ByVal Objekt As Button)

ááááááá Dim frm1 As New Form()

ááááááá frm1.Controls.Add(Objekt)

ááááááá Objekt.Text = "TlaΦφtko1"

ááááááá frm1.Show()

ááá End Sub

End Class

 

V naÜem p°φpad∞ jsou deklarovßny t°i varianty konstruktoru t°φdy A. Prvnφ varianta pracuje s parametrem typu String, jen₧ nese nßzev Textov²╪et∞zec. Je-li tomuto konstruktoru p°edßn textov² °et∞zec, vypoΦte se poΦet znak∙ v °et∞zci prost°ednictvφm funkce Len (funkce Len vracφ poΦet znak∙ v °et∞zci, p°iΦem₧ za znak je pova₧ovßna takΘ mezera). Druhß alternativa p°ijφmß argument v podob∞ Φφsla s pohyblivou desetinnou Φßrkou. VypoΦte hodnotu koeficientu, kterou zobrazφ v okn∞ se zprßvou. Snad nejpozoruhodn∞jÜφ je t°etφ podoba konstruktoru, parametrem kterΘ je instance ovlßdacφho prvku Button. Kdy₧ je parametru p°edßn nßzev instance ovlßdacφho prvku Button, je vytvo°ena instance t°φdy Form s nßzvem frm1. Nßsledn∞ je instance ovlßdacφho prvku Button p°idßna do kolekce ovlßdacφch prvk∙ formulß°e frm1. TaktΘ₧ je modifikovßn textov² °et∞zec, jen₧ se bude zobrazovat na vytvo°enΘ instanci ovlßdacφho prvku Button.á

 

P°i deklaraci objektovΘ prom∞nnΘ vßm technologie IntelliSense nabφdne k pou₧itφ vÜechny varianty konstruktoru (obr. 4).

 

 

Obr. 4 û P°etφ₧en² konstruktor a technologie IntelliSense

 

Zp∞t na obsah

 

Jßn Hanßk