ZaΦßteΦnφk

PokroΦil²

Profesionßl

Prostor pro experimentovßnφ

Programßtorskß laborato°

 

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

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

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

 

 

 

Ukßzka mφchßnφ programovacφch jazyk∙ platformy .NET (Visual Basic .NET a Visual C# .NET)

Implementace vlastnosti, kterß je jenom pro Φtenφ

Zobrazenφ Φφsel °ßdk∙ v editoru pro zßpis k≤du

 

 

Ukßzka mφchßnφ programovacφch jazyk∙ platformy .NET

(Visual Basic .NET a Visual C# .NET)

 

Skalnφ p°φznivci naÜφ programovacφ rubriky si jist∞ vzpomenou, ₧e problematice mφchanφ programovacφch jazyk∙ jsme se ji₧ v∞novali. Tehdy bylo naÜφm spoleΦn²m cφlem vytvo°enφ dynamicky linkovanΘ knihovny (DLL) v jazyku Visual C++ a poslΘze jejφ vyu₧itφ v prost°edφ Visual Basicu. V tomto tipu si na muÜku vezmeme dalÜφho zßstupce programovacφch jazyk∙ platformy .NET, kter²m je zcela nov² a pln∞ objektov∞ orientovan² Visual C# .NET.

 

C# p°edstavuje dalÜφ evoluΦnφ Φlßnek ve v²voji programovacφch jazyk∙, zßkladem kter²ch byl populßrnφ, i kdy₧ pro mnoho programßtor∙ znaΦn∞ obtφ₧n² jazyk C a poslΘze takΘ C++. Ti z vßs, kte°φ n∞kdy pracovali s Visual C++ a jeho IDE, jist∞ uznajφ, ₧e nejv∞tÜφm problΘmem, zejmΘna v zaΦßtcφch, byla absence pln∞ vizußlnφho prost°edφ pro nßvrh aplikacφ ve stylu Windows. Dobrou zprßvou je, ₧e p°i programovßnφ ve Visual C# .NET ji₧ nebudete odkßzßni jenom na psanφ programovacφch smyΦek, ale m∙₧ete vyu₧φt stejnΘ IDE, na jakΘ jste zvyklφ z VB .NET. Ve vÜeobecnosti by bylo mo₧nΘ prohlßsit, ₧e jazyk C# je velmi vhodn²m kandidßtem na to, abyste se pokusili porozum∞t alespo≥ zßklad∙m prßce s nφm. Nejenom, ₧e vßm nabφzφ vÜechno ädobrΘô ze sv∞ta C a C++, ale p°idßvß mnohΘ prvky a programovΘ konstrukce, kterΘ jsou vßm, jako profesionßlnφm programßtor∙m ve VB .NET, v mnoha ohledech znßmΘ.

 

V nßsledujφcφ p°φpadovΘ studii si ukß₧eme, jak lze spojit sφlu Visual Basicu a C#. NaÜφm hlavnφm zßjmem bude vytvo°enφ t°φdy v prost°edφ C#. Tato t°φda bude obsahovat jednu metodu, kterou pozd∞ji zavolßme z VB .NET. Pus¥me se tedy do prßce.

 

Tvorba projektu typu Class Library ve Visual C#

 

  1. Spus¥te Visual C#, vyberte nabφdku File, uka₧te na New a klepn∞te na polo₧ku Project.
  2. V dialogovΘm okn∞ New Project se ujist∞te, ₧e v sekci Project Types je vybrßn adresß° Visual C# Projects. V rßmeΦku Templates zvolte polo₧ku s ikonou Class Library (obr. 1). Projekt s t°φdou jsem pojmenoval jako CS_Auto a rovn∞₧ tak jsem aktivoval i volbu Create directory for Solution. ááá

 

 

Obr. 1 û V²b∞r typu projektu Class Library ve Visual C# .NET

 

  1. Jestli₧e klepn∞te na tlaΦφtko OK, C# vytvo°φ projekt s nßzvem CS_Auto, do kterΘho p°idß t°φdu s nßzvem Class1.

 

Pokud se podφvßte do okna Solution Explorer, uvidφte, ₧e k≤d t°φdy Class1 je ulo₧en v souboru s nßzvem Class1.cs.á

 

 

Bli₧Üφ pohled na automaticky vygenerovan² k≤d projektu

 

Podφvejme se v tΘto chvφli na vÜechen automaticky sestaven² k≤d a pov∞zme si, co d∞lß:

 

using System;

 

namespace CS_Auto

{

ááááá /// <summary>

ááááá /// Summary description for Class1.

ááááá /// </summary>

ááááá public class Class1

ááááá {

ááááááááááá public Class1()

ááááááááááá {

ááááááááááááááááá //

ááááááááááááááááá // TODO: Add constructor logic here

ááááááááááááááááá //

ááááááááááá }

ááááá }

}

 

P°i studiu programovΘho k≤du jazyka Visual C# uvidφte, ₧e n∞kterΘ p°φkazy a klφΦovß slova jsou psßna mal²mi pφsmeny a jinΘ partie k≤du kombinujφ malß i velkß pφsmena. Je pot°ebnΘ, abyste m∞li na pam∞ti skuteΦnost, ₧e jazyk C# striktn∞ rozliÜuje mezi mal²mi a velk²mi pφsmeny abecedy (jazyk C# je tedy äcase-sensitiveô, podobn∞ jako t°eba C nebo C++).á

 

Na ·vodnφm °ßdku je pou₧it p°φkaz using, kter² je prot∞jÜkem p°φkazu Imports z VB .NET. Zavßdφ do programovΘho k≤du t°φdy odkaz na jmenn² prostor .NET Frameworku s nßzvem System. Podobn∞ takΘ p°φkaz Imports se ve VB .NET pou₧φvß na to, aby bylo mo₧nΘ odkazovat se na dalÜφ t°φdy, metody a vlastnosti danΘho jmennΘho prostoru bez nutnosti uvßd∞nφ pln∞ kvalifikovan²ch nßzv∙. Ve C# se p°φkaz using musφ nachßzet jeÜt∞ p°ed definicφ jak²chkoliv dalÜφch jmenn²ch prostor∙.

 

Podobn∞ jako v jazycφch C a C++, tak i v C# je °ßdek programovΘho k≤du ukonΦen st°ednφkem, tedy ne stiskem klßvesy Enter, jak je tomu ve Visual Basicu .NET.á

 

V²pis k≤du pokraΦuje definicφ jmennΘho prostoru pomocφ klφΦovΘho slova namespace. áJak si m∙₧ete vÜimnout, jmΘno projektu (CS_Auto), kterΘ jste zadali p°i vytvß°enφ projektu, je souΦasn∞ nßzvem jmennΘho prostoru. K≤d samotnΘ t°φdy (zatφm standardn∞ pojmenovanΘ jako Class1) i konstruktoru se nachßzφ ve vyhrazenΘm bloku, jen₧ je ohraniΦen klφΦov²m slovem namespace a p°φsluÜn²mi slo₧en²mi zßvorkami, kterΘ definujφ hranice tohoto programovΘho bloku.

 

ZnaΦka <Summary> pat°φ mezi n∞kolik dokumentaΦnφch znaΦek, kterΘ podporujφ implementaci XML dokumentace programovΘho k≤du jazyka C#.

 

KoneΦn∞ se dostßvßme k deklaraci samotnΘ t°φdy Class1. T°φda je deklarovßna s p°φdomkem public, co znamenß, ₧e jde o ve°ejnou t°φdu, kterß bude dostupnß v celΘm projektu. P°esn∞jÜφ by bylo vyjßd°enφ, ₧e instance tΘto ve°ejnΘ t°φdy, tedy samotnΘ objekty, bude mo₧nΘ tvo°it z jakΘhokoliv mφsta v projektu. Standardnφ nßzev t°φdy zm∞≥te na Automobil. ááááá

 

V bloku t°φdy je deklarovßn takΘ konstruktor, kter² mß ve Visual C# stejn² nßzev jako samotnß t°φda. Konstruktorem se rozumφ metoda, kterß je primßrn∞ aktivovßna v okam₧iku vytvß°enφ instance t°φdy. Konstruktor je velmi u₧iteΦn², proto₧e prost°ednictvφm n∞ho lze vhodn∞ inicializovat datovΘ Φleny t°φdy jeÜt∞ p°edtφm, ne₧ se tyto pou₧ijφ. Jak v prost°edφ C#, tak i ve VB .NET lze vytvß°et n∞kolik variant konstruktor∙ se stejn²m nßzvem a odliÜnou signaturou. UvedenΘmu procesu se potΘ °φkß p°etφ₧enφ konstruktoru.

 

Proto₧e t°φda a jejφ konstruktor musφ mφt stejnΘ nßzvy, upravte i nßzev konstruktoru na Automobil.á

 

 

P°idßnφ metody do vytvo°enΘ t°φdy

 

Do t°φdy Automobil p°idßme pro zjednoduÜenφ jenom jednu ve°ejnou metodu s nßzvem VypoΦφstSpot°ebu, ·kolem kterΘ bude zjiÜt∞nφ v²Üe spot°eby automobilu. áUka₧me si ovÜem nejprve v²pis modifikovanΘho programovΘho k≤du projektu a potΘ si vysv∞tlφme, jak ve skuteΦnosti pracuje:

 

using System;

 

namespace CS_Auto

{

ááááá /// <summary>

ááááá /// Summary description for Class1.

ááááá /// </summary>

ááááá public class Automobil

ááááá {

ááááááááááá public Automobil()

ááááááááááá {

ááááááááááááááááá //

ááááááááááááááááá // TODO: Add constructor logic here

ááááááááááááááááá //

ááááááááááá }

 

ááááááááááá public int VypoΦφstSpot°ebu(int PoΦetKilometr∙,

ááááááááááááááááá short Spot°ebaNaKilometr)

ááááááááááá {

ááááááááááááááááá return PoΦetKilometr∙*Spot°ebaNaKilometr;

ááááááááááá }

ááááá }

}

 

K≤d metody VypoΦφstSpot°ebu se nachßzφ pod k≤dem konstruktoru t°φdy. Metoda je definovßna jako ve°ejnß a pracuje se dv∞ma parametry:

 

 

V t∞le metody je umφst∞n jenom jeden °ßdek k≤du, kter² vypoΦte celkovou spot°ebu automobilu a tuto vypoΦtenou hodnotu nßsledn∞ vrßtφ volajφcφ procedu°e (volajφcφ proceduru vytvo°φme za chvφli ve VB .NET).

 

Po napsßnφ programovΘho k≤du je naΦase p°elo₧it projekt. Vyberte nabφdku Build a aktivujte p°φkaz Build Solution. á

 

Jestli₧e vÜe prob∞hlo ·sp∞Ün∞, m∙₧ete p°istoupit k dalÜφmu kroku, kter²m je p°idßnφ projektu VB .NET do stßvajφcφho °eÜenφ a nadvßzßnφ komunikace s prßv∞ vytvo°enou t°φdou.

 

 

P°idßnφ projektu VB .NET do stßvajφcφho °eÜenφ

 

Postupujte podle instrukcφ:

 

  1. Otev°ete nabφdku File, uka₧te na polo₧ku Add Project a vyberte p°φkaz New Project.
  2. V sekci Project Types vyberte slo₧ku s nßzvem Visual Basic Projects. V rßmeΦku Templates vyberte ikonu standardnφ aplikace pro Windows (Windows Application). P°idßvan² projekt takΘ vhodn∞ pojmenujte.á

 

 

Obr. 2 û P°idßnφ projektu Visual Basicu do °eÜenφ

á

  1. Obrazovß struktura okna Solution Explorer by m∞la vypadat jako ta na obr. 3.

 

 

Obr. 3 û Podoba okna Solution Explorer po p°idßnφ projektu VB .NET

 

  1. V okn∞ Solution Explorer klepn∞te prav²m tlaΦφtkem myÜi na polo₧ku References projektu VB .NET a zvolte p°φkaz Add Reference.

 

  1. V zobrazenΘm dialogovΘm okn∞ se ujist∞te, ₧e je vybrßna zßlo₧ka .NET. Klepn∞te na tlaΦφtko Browse a vyhledejte soubor DLL s k≤dem t°φdy, kterou jste vytvo°ili p°edtφm v C#. Po vyhledßnφ souboru a p°idßnφ odkazu na n∞j by m∞lo okno vypadat jako to na obr. 4.

 

 

Obr. 4 û P°idßnφ reference na knihovnu DLL s k≤dem t°φdy Automobil

 

  1. Nakonec klikn∞te na tlaΦφtko OK. V tomto okam₧iku se p°idß odkaz na knihovnu DLL do projektu Visual Basicu. Tuto situaci m∙₧ete pozorovat v okn∞ Solution Explorer (obr. 5).

 

 

Obr. 5 û Jmenn² prostor CS_Auto v projektu VB .NET

 

  1. V okn∞ Solution Explorer jeÜt∞ na chvφli z∙staneme. Aby bylo za chvφli mo₧nΘ spustit projekt VB .NET a otestovat chovßnφ t°φdy, musφte Visual Basicu pov∞d∞t, aby jako startovacφ projekt nastavil prßv∞ projekt typu Windows Application. To ud∞lßte tak, ₧e na nßzev projektu VB .NET klepn∞te prav²m tlaΦφtkem myÜi a z kontextußlnφ nabφdky vyberete p°φkaz Set as StartUp Project.

 

  1. PokraΦujte tφm, ₧e na formulß° p°idßte jednu instanci ovlßdacφho prvku Button. Na vytvo°enou instanci poklepejte, na co₧ se vßm zp°φstupnφ okno editoru pro zßpis programovΘho k≤du. Do t∞la udßlostnφ procedury Button1_Click zadejte tento fragment zdrojovΘho k≤du:

 

áááá Dim ObjektAuto As New CS_Auto.Automobil()

 

áááá MessageBox.Show("Pen∞₧nφ vyjßd°enφ spot°eby PHM vaÜeho auta Φinφ " & _

áááá ObjektAuto.VypoΦφstSpot°ebu(100, 27)).ToString & " KΦ.", _

áááá "Ukßzka mφchßnφ programovacφch jazyk∙")

 

  1. Spus¥te °eÜenφ (klßvesa F5) a klepn∞te na tlaΦφtko Button1. V²slednφ efekt Φinnosti k≤du m∙₧ete vid∞t na obr. 6.

 

 

Obr. 6 û Mφchßnφ programovacφch jazyk∙ v praxi

 

Zp∞t na obsah

 

Implementace vlastnosti, kterß je jenom pro Φtenφ

 

P°i objektov∞ orientovanΘm nßvrhu je n∞kdy zapot°ebφ vytvo°it vlastnost objektu, kterß bude pro vn∞jÜφ sv∞t jenom pro Φtenφ. Jestli₧e je vlastnost urΦena pouze pro Φtenφ, programov² k≤d klientskΘ aplikace m∙₧e pouze Φφst hodnotu danΘ vlastnosti, nenφ ovÜem schopen hodnotu vlastnosti jakkoliv m∞nit. Jak vytvo°it vlastnost jenom pro Φtenφ, si ukß₧eme v tomto tipu.

 

Postupujte takto:

 

  1. Vytvo°te novou aplikaci pro Windows (Windows Application).
  2. P°idejte do aplikace soubor pro t°φdu. Soubor s t°φdou za°adφte do aplikace tak, ₧e vyberete nabφdku Project a aktivujete polo₧ku Add Class.á

 

P°edpoklßdejme, ₧e budete chtφt vytvo°it t°φdu s nßzvem PoΦφtaΦ, kterß bude obsahovat vlastnost TaktCPU. Tato vlastnost bude urΦena jenom pro Φtenφ. Programov² k≤d, jen₧ p°edvßdφ tuto modelovou situaci je uveden nφ₧e:

 

Public Class PoΦφtaΦ

ááá Private ReadOnly m_TaktCPU As Integer

ááá Public ReadOnly Property TaktCPU() As Integer

ááááááá Get

ááááááááááá Return m_TaktCPU

ááááááá End Get

ááá End Property

 

ááá Public Sub New()

ááááááá m_TaktCPU = 1700

ááá End Sub

End Class

 

Ka₧dß vlastnost, kterß je urΦena jenom pro Φtenφ, musφ mφt ve svΘ deklaraci uvedeno klφΦovΘ slovo ReadOnly. P°esn∞ stejnß je situace i u vlastnosti TaktCPU. V t∞le vlastnosti TaktCPU je vytvo°en jenom blok Get-End Get, kter² vracφ hodnotu soukromΘho datovΘho Φlenu m_TaktCPU. Prßv∞ tento soukrom² datov² Φlen uchovßvß inicializaΦnφ hodnotu, kterß reprezentuje takt procesoru v MHz a podobn∞ jako samotnß vlastnost i on musφ mφt v deklaraΦnφm p°φkazu uvedeno klφΦovΘ slovo ReadOnly.

 

Dobrß, doposud jsme si °ekli, ₧e vlastnost TaktCPU je urΦena jenom pro Φtenφ a z tohoto d∙vod∙ nemß klientsk² k≤d oprßvn∞nφ k modifikaci tΘto vlastnosti. Jak ale potom nastavφme poΦßteΦnφ hodnotu tΘto vlastnosti? P°edem by bylo t°eba °φci, ₧e samotnß vlastnost neobsahuje hodnotu. Vlastnost je jenom programovacφ konstrukce, kterß umo₧≥uje p°istupovat k jistΘ hodnot∞. Tato hodnota je ovÜem ulo₧ena v soukromΘm datovΘm Φlenu, resp. v prom∞nnΘ datovΘho typu Integer s nßzvem m_TaktCPU.

 

Vhodn²m okam₧ikem pro poΦßteΦnφ inicializaci datovΘho Φlenu m_TaktCPU je konstruktor t°φdy PoΦφtaΦ. Konstruktor ve VB .NET mß v₧dy podobu ve°ejnΘ procedury Sub New, kterß je standardn∞ bez jak²chkoliv parametr∙ (pochopiteln∞, je mo₧nΘ vytvo°it takΘ konstruktor s parametry). V k≤du konstruktoru dochßzφ k inicializaci datovΘho Φlenu m_TaktCPU na hodnotu 1700. V₧dy, kdy₧ dojde k zrozenφ instance tΘto t°φdy, bude spuÜt∞n k≤d konstruktoru, kter² inicializuje hodnotu soukromΘho datovΘho Φlenu. Po vytvo°enφ instance t°φdy bude mo₧nΘ k hodnot∞ soukromΘho datovΘho Φlenu p°istupovat pomocφ vlastnosti TaktCPU. áá

 

P°edve∩me si praktickou ukßzku:

 

  1. P°idejte na formulß° instanci ovlßdacφho prvku Button a programov² k≤d jeho udßlostnφ procedury Click dopl≥te tφmto zp∙sobem:

 

á

ááá Private Sub Button1_Click(ByVal sender As System.Object, _

ááá ByVal e As System.EventArgs) Handles Button1.Click

 

ááááááá Dim MojePC As PoΦφtaΦ

ááááááá MojePC = New PoΦφtaΦ()

ááááááá Me.Text = "Takt procesoru je " & _

ááááááá MojePC.TaktCPU & " MHz."

 

ááá End Sub

 

  1. Po spuÜt∞nφ aplikace se hodnota vlastnosti TaktCPU objektu MojePC objevφ v titulkovΘm pruhu okna (obr. 7).

 

 

Obr. 7 û ZjiÜt∞nφ hodnoty vlastnosti, kterß je urΦena jenom pro Φtenφ

 

Zp∞t na obsah

 

Zobrazenφ Φφsel °ßdk∙ v editoru pro zßpis k≤du

 

Z vlastnφ zkuÜenosti vφm, ₧e n∞kter²m programßtor∙m se s zdrojov²m k≤dem pracuje lΘpe v p°φpad∞, kdy jsou vÜechny °ßdky k≤du Φφseln∞ oznaΦenΘ. Visual Basic .NET samoz°ejm∞ podporuje mo₧nost zobrazovßnφ Φφsel °ßdk∙ programovΘho k≤du. Volba, kterß tuto schopnost IDE aktivuje je ovÜem pon∞kud dob°e ukryta. Jak se k nφ dopracovat, si ukß₧eme prßv∞ te∩:

 

  1. Vyberte menu Tools a klepn∞te na poslednφ polo₧ku Options.
  2. V stromovΘ struktu°e slo₧ek v levΘ Φßsti okna Options klepn∞te na slo₧ku s nßzvem Text Editor.
  3. Dßle klepn∞te na podslo₧ku Basic a ujist∞te se, ₧e je vybrßna polo₧ka General.
  4. V sekci Display zatrhn∞te volbu Line numbers (obr. 8) a aktivujte tlaΦφtko OK.

 

 

Obr. 8 û Aktivace zobrazovßnφ Φφsel °ßdk∙ v editoru pro zßpis zdrojovΘho k≤du

 

Od tΘto chvφle budou Φφsla °ßdk∙ vaÜφm nerozluΦn²m pomocnφkem p°i psanφ programovΘho k≤du (obr. 9).

 

 

Obr. 9 û ╚φsla °ßdk∙ v editoru pro zßpis zdrojovΘho k≤du

 

Zp∞t na obsah

 

Jßn Hanßk