|
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ß°∙
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φ:
Obr. 1 û Podoba panelu Text
Editor
á
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.
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:
Obr. 2 û V²b∞r metody New
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.
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
Jßn Hanßk