Programujeme ve Visual Basic .NET - 4.díl - ošetření chyb

Diskuze čtenářů k článku

Ondřej  |  16. 09. 2004 15:42

Dobrý den

 

Píši vám ohledně vašeho seriálu na živě „Programujeme ve Visual Basic .NET“.Vše mi zatím jde a vychází v pořádku jen mi dělá problém dostat z programu Snippet Compiler  soubor s .exe nebo .com koncovkou.Nabízí mi to jen koncovky na C++ ,VB a ještě nějakou.Jde mi o to jak ten program převést na exe soubor abych ho mohl třeba někomu poslat pomocí mailu nebo přes cd,aby on jen kliknul na ten program a spustil se mu.Aniž by musel najíždět do Snippet Compiler  a spouštět ho pomocí zelené šipky „play tlačítka“.Předem děkuji za odpověď

 

Ondřej

Souhlasím  |  Nesouhlasím  |  Odpovědět
Petrik  |  16. 09. 2004 16:58

Taky zdravím - plnou cestu k EXE souboru naleznete vždy při jeho spuštění zeleným tlačítkem v záhlaví okna konzole.

SnippetCompiler ukládá každou zkompilovanou verzi do nového adresáře, který se po zavření SnippetCompileru vymaže. Poslední verzi naleznete, když si adresáře ve složce SnippetCompilerTemp seřadíte podle data vzniku. Pokud v adresáři vzniknou další soubory, jako DLL, aplikace je bude po spuštění vyžadovat také, PDB soubory slouží jen pro ladění a lze je vymazat.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Petrik  |  16. 09. 2004 20:35

Jeětě poznámka - podobně se chovají i ostatní vývojová prostředí pro .NET, (jako Visual Studio .NET nebo SharpDevelop.) Prostředí VB.NET nepodporuje interpretovaný režim běhu programů v IDE jako předchozí verze Visual Basic-u, všechny aplikace se musejí před spuštěním zkompilovat, proto v nabídce chybějí příkazy pro vygenerování spustitelného EXE souboru - ten vzniká vždycky při pokusu o spuštění kódu z IDE automaticky.

V případě VS.NET nebo #Develop najdete zkompilovaný EXE zpravidla v podadresáři \BIN aktuálního projektu. Soubory pro distribuci mají připonu *.EXE, *.DLL nebo *.CONFIG - ostatní zde umístněné soubory zpravidla nejsou pro spuštění nutné a lze je vymazat. Upzoorňuji na to proto, že soubory PDB, které bývají často docela velké  jsou nutné jen pro ladění . Pokud v nabíce SnippetCompileru Tools...Options... Build  vypnete volbu Generate Debug Symbols ,nebudou se generovat vůbec a kompilace se značně urychlí - na druhé straně něbudete moci krokovat zdroják při ladění řádek po řádku.

S laděním .NET aplikací se seznámíme časem - zatím pouze tolik, že pro ladění potřebujete Visual Studio .NET ,nebo tzv CLR Debugger, který je součástí .NET Framework SDK, který je volně k dispozici na MSDN (obvykle cca 110 - 120 MB download). Stáhněte si tu verzi, která odpovídá Vaší verzi .NET runtime, např. SDK pro poslední podporovanou verzi .NET má číslo verze 1.1 , S Visual Basic Express 2005 se distribuuje beta verze .NET SDK 2.0. Kromě CLR debuggeru s .NET SDK získáte řadu dalších užitečných utilit, rozsáhlou nápovědu v HTML formátu (ovšem pouze v angličtině), ukázkové databáze a ukázky kódu pro celou řadu aspektů .NET Framework.

http://www.microsoft.com/downloads/details.aspx?FamilyId=9B3A2CA6-3647-4070-9F41-A333C6B9181D&displaylang=en

Pokud si nejste jisti, jakou verzi .NET zrovna používáte, aktuálně používanou verzi .NET Frameworku a zároveň cestu k adresáři, kde je v systému nainstalován lze v každé aplikaci .NET zjistit např. tímto způsobem:

Module modMain
  Sub Main
    System.Console.WriteLine(System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory)
 End Sub
End Module

Ještě předběžně upozorňuji na to, že pokud máte ve Windows nainstalováno několik verzi .NET prostředí současně, vývojová prostředí (jako SnippetCompiler, SharpDevelop či VisualStudio.NET) Vám umožňují zvolit, jakou verzi bude zkompilovaná aplikace používat (viz např. nabídka SnippetCompileru Tools..Options... Run). Pravidlem je, že naprostá většina aplikací zkompilovaná pro nižší verzi .NET Framework by měla bez problémů fungovat i pod novější verzi..

Souhlasím  |  Nesouhlasím  |  Odpovědět
ugaa  |  15. 09. 2004 18:11

ahoj potreboval bych poradit, cim je ve vb .net nahrazena funkce DriveListBox a FileListBox a popr jak se to pouziva :) dik

Souhlasím  |  Nesouhlasím  |  Odpovědět
Petrik  |  15. 09. 2004 19:52

Nejprve je nutné říci, že  99% objektů DriveListBox a FileListBox bylo ve VB.NET používaných pro tvorbu tzv. souborových dialogů - čili okna, které se vám otevře, pokud chcete třeba v Notepadu otevřít či uložit soubor. Pro tyto účely nemá smysl DriveListBox a FileListBox  používat a sestavovat tak to, co je v systému k dispozici jako standardní systémový dialog v podobě tříd System.Windows.Forms.OpenFileDialog a System.Windows.Forms.SaveFileDialog. Používají se do značné míry podobně, jako standardní VB ActiveX prvky z knihovny Common Dialog Controls a mají výhodu, že mají jednotný vzhled, reflektují Windows Themes, lokalizaci atd..

Nicméně, pokud se vám DriveListBox , FileListBox  (a zvlášť stromeček DirListBox..) líbí a chcete / potřebujete jej používat i nadále, je schovaný v knihovně  Microsoft.VisualBasic.Compatibility.dll . Např. v prostředí VisualStudio .NET se k nim dostanete následovně - vyberte si vhodnou záložku Toolbox-u, klikněte na ni pravým tlačítkem myši, a z popUp nabídky vyberte volbu "Customize Toolbox..." Zobrazí se stejnojmenný dialog, ve kterém si v záložce .NET Framework Components tlačítkem Browse  v adresáři %systemroot%\Microsoft.NET\Framework podle verze .NETu, kterou právě používáte nalistujete knihovnu Microsoft.VisualBasic.Compatibility.dll (já osobně ji mám pouze v adresáři verze 1.0 a 2.0 .NET Framework). V dialogu aspoň jednu z voleb zaškrtnete a potvrdíte OK - na toolbox se Vám přidají staré známé komponenty z předchozích verzí Visual Basicu.

Upozorňuju ale, že pro většinu z komponent v prostředí .NET existují mnohem dokonalejší nativně podporované alternativy a v nových projektech by jste je už neměl používat. Microsoft je s .NET dodává především kvůli snazší migraci starších projektů do prostředí Visual Studia .NET. Nicméně - pak je lze používat stejně, jako kterékoliv UserControls třetí strany.

Pro úplnost mohu předvést, jak lze jednoduše např. FileListControls v prostředí VB.NET nahradit nativními komponentami .NET - na formulář přidáte obyčejný ListBox, např. ListBox1 a namísto nastavení cesty (např. File1.Path = "C:\") zavoláte se stejným výsledkem příkaz

ListBox1.DataSource = System.IO.Directory.GetFiles("C:\")

Není samozřejmě problém zapouzdřit si tuto funkcionalitu do vlastního UserControl, např. takto:

Imports System.IO, System.Windows.Forms
Module modMain
  Sub Main()
    With New Form()
      .Controls.Add(New FileList("C:\WINNT"))
      .ShowDialog()
    End With
  End Sub
  Class FileList : Inherits UserControl
    Private LB As New ListBox()
    Sub New(Optional ByVal Path$ = "C:\")
      LB.Dock = DockStyle.Fill : Controls.Add(LB)
      Me.Path = Path
    End Sub
    Property Path$()
      Get
        Return LB.Tag
      End Get
      Set(ByVal sNewPath$)
        LB.DataSource = Directory.GetFiles(sNewPath)
        LB.Tag = sNewPath
      End Set
    End Property
  End Class
End Module

Souhlasím  |  Nesouhlasím  |  Odpovědět
Petrik  |  15. 09. 2004 20:02

Ehm, pokud sem nalinkuji nějaké HTML s tagem PRE, zmrší to diskusi pokud ne, zmrší to Živě aspoň dotyčný příspěvek.... Kdysi příspěvkový editor na Živě fungoval, ale lidé se do něj naučili pastovat skripty, takže z něj zbyla tato zpotvořenina.....

No nic, na tu ukázku se raději podívejte sem: http://vbnet.aspweb.cz/vbnet/FileListUserControl.htm

Jejím výsledkem by mělo být něco podobného - snad vám to dá aspoň představu o tom, jak snadno se ve VB.NET vytvářejí a používají vlastní uživatelské prvky (žádná OCX, žádné registrace, třída control-u může být součástí kódu).... 

Souhlasím  |  Nesouhlasím  |  Odpovědět
Petrik  |  15. 09. 2004 20:22

Tohle je spíš didaktická ukázka tvorby vlastních UserControls - v praxi by bylo zřejmě nejefektivnější podědit přímo třídu ListBox a vystavit z ní třídu FileSystemWatcher - tím by vzniklý control získal současně funkcionalitu třídy ListBox  (např. řazení, přístup ke kolekci položek) a rozhraní třídy FileSystemWatcher (podpora masky, atributů souboru a událostí file systému). Takovýto "FileList" by pak mohl reagovat na změny v souborovém systému sám - určitě sami přijdete na další finty...

Souhlasím  |  Nesouhlasím  |  Odpovědět
Jiri  |  15. 09. 2004 14:29
Petrik  |  15. 09. 2004 18:35

Díky za link - recenze je velice zajímavá (a kritická), nicméně se pokusím svůj přístup zdůvodnit.

vysvětlování nového tématu s odlišným viděním problému by nemělo být budováno na předchozích zastaralých znalostech

Naopak - já žádné předchozí znalosti nepředpokládám. Na druhé straně, problematiku proměnných a základních programovacích struktur (jako jsou podmínky, kontrola chyb, cykly apod.) vykládám na prvním místě prostě proto, že jsou základní, "nadčasové" a fungují ve většině programovacích jazyků.

vizi "jednoduchého" VB jako chameleona proplouvajícího napříč technologiemi již léta skoro beze změny

VB.NET se samozřejmě vyvíjí stejně jako ostatní jazyk, ale nerad bych začátečníky odrazoval výkladem fíčur, které do VB byly přidány úplně naposledy. To, že do něj byly implementovány tak pozdě mj. znamená, že nejsou pro pochopení problematiky programování (a VB jako takovém) podstatné. A proč by se měl začátečník seznamovat s třídami, když neumí ani deklarovat proměnnou nebo vyskočit ze smyčky ? To mi nepřijde příliš smysluplné.

jmenný prostor Microsoft.VisualBasic, s jehož pomocí je způsob kódování ve VB.NET degradován na hybridní VB6/.NET styl

Jednak jsem s názvovým prostorem Microsoft.VisualBasic zatím čtenáře v seriálu nekontaktoval, jednak to není úplně přesné - názvový prostor Microsoft.VisualBasic slouží ke zpřístupnění užitečných funkcí z původní VB runtime knihovny - nic více, nic méně. Takže, kdo chce počítat třeba úrokovou míru, má možnost si napsat vlastní, nebo sáhnout do tohoto jmenného prostoru a využít zdejší užitečné finanční, formátovací aj. funkce.. K používání zastaralé konstrukce jako On Error Goto 24 vám ale tento názvový prostor mnoho nepomůže - její podpora je záležitost překladače.

Alibistické je to proto, že se sice dle svých slov vyhýbá teoretickému vysvětlování některých pojmů, ale to mu nebrání, aby nás hned ve druhém dílu seriálu nepoučil o o logickém členění programu do modulů

Bohužel, vyložit členění programu do modulů je holá nutnost, jinak ve VB.NET nelze napsat ani ten nejkratší program. Dále - pokud založíte projekt konzolové aplikace ve stylu HelloWorld v prostředí IDE jako je SnippetCompiler, SharpDevelop či Visual Studio - vytvoří se vám právě takový modulový projekt. Nemohu tedy existenci modulu obejít s tím, že to jsou stejně na úrovni .NETu zjednodušené třídy - když je to to první, s čím se začátečník při tvorbě HelloWorld setká. A konečně - moduly jsou známá ze starších verzí VB i BASICu.

jeho čtenáři jsou již dostatečně vyspělí, aby pochopili konstrukci Try - Catch a to vše ještě před řídícími konstrukcemi jazyka

Zde jsem vycházel z faktu, že každý program může mít chyby (a tedy i ten, který nepoužívá žádné řídící struktury, natož třeba třídy). Myslím, že moje zařazení konstrukce Try-Catch právě sem má svoji logiku - o tom, že zpracování výjimek může být složitejší jsem se ostatně zmínil. Rozsah jednoho dílu seriálu je ostatně pevně daný rozsahem 3000 - 5000 znaků - není možné (a pro začátečníka ani nutné) v něm probírat všechny možné detaily a varianty dané konstrukce (sám se kolikrát přistihnu, že je po dopsání dílu seriálu musím seškrtat).

Dalšími lapsy jsou neustálé vypisování celé hierarchie jmenných prostorů 

Zkušenějšímu programátorovi použití klauzule Imports určitě šetří psaní (sám je používám masivně), nicméně vypisování celé cesty je jednak jednoznačnější, jednak pomůže začátečníkovi s lokalizací tříd ve stuktuře jmenných prostorů, jednak (v případě metod jako System.Console.WriteLine) nikoho ani na okamžik nenechá na pochybách, co vlastně ten příkaz dělá - zapisuje řádek do systémové konzole - je to sebepopisné.

nebo utvrzování začátečníka, že používání "magických" čísel místo konstant je v pořádku

V pořádku to není, ale je to intuitivní a v situaci, kde potenciálnímu čtenáři není znám rozdíl ani mezi proměnnou a konstantou je to trochu logický skok. Ani v mateřské školce nikdo nikomu nevtlouká do hlavy rozdíl mezi samohláskami a souhláskami, dokud se nenaučí číst oboje.

Obecně vztato soudím, že je nutné najít rovnováhu mezi tím, co je formálně správné a co je intuitivní a co je podstatné pro pochopení.  A nelze to podceňovat - jeden z důvodů, proč například stagnuje rozvoj Javy je její formalismus. To, že se pro 99% malých a středních projektů na Windows používá právě Visual Basic také není náhoda.

Co se pojmu tříd týče, nemyslím si, že je nutné je probírat dříve, než programátor chápe rozdíl mezi modulem (struktura, nesoucí kód) a UDT (struktura, nesoucí pouze data) a pochopí tak, jak třída spojuje výhody obou, kdy má smysl používat jedno a od jaké úrovně druhé. Jednoduchý shell skript také není nutno začínat deklarací třídy, aby fungoval efektivně a zůstal přehledný, modulární a rozšiřitelný. Je jen otázka míry, do jaké nějaký schematický šablonovitý přístup k řešení problému (ať už založený na OOP, nebo na jiné koncepci) k řešení problému použijete (ať už s ohledem na výkon, rozšiřitelnost, modularitu, údržbu, atd.).

Seriál je rozvleklý, těžkopádný a skáče bez jakékoli logické souvislosti z tématu na téma

Je jasné, že profesionála bude jeho současné tempo zdržovat, ale moje hledisko je následující: s minimálním objemem znalostí dosáhnout co největšího efektu. Proto se hodlám v prvních cca deseti dílech seriálu (ale ne déle) věnovat konzolovým aplikacím a nebudu řešit např. metody pro výstup do souboru nebo IPC - protože to konzolové aplikace umí samy a začátečník tak rychle získá prostředky pro práci s daty. Ne nadarmo se konzolové aplikace tolik používají v UX prostředí a cvičit další generace klikajících programátorů není mým záměrem. VB.NET tak ostatně není stavěn - kdybych začal výklad tvorbou GUI aplikace, navázal bych právě na to, co se mi na dosavadních učebnicích nelíbí. Ostatně, využití dnešního VB.NET je mnohem širší, než tvorba formulářů, třeba i ty konzolové aplikace.

jeden děsnej seriál pro začátečníky o PHP už máme

Myslím, že není jednoduché se zavděčit všem, ale mě osobně se seriál o PHP právě líbí tím, že sleduje problematiku v širším kontextu (např. s použitím SQL příkazů) a prakticky. Další vynikající seriál je třeba na root.cz o programování 3D grafiky - na třídy a další osvědčené přístupy v něm nenarazíte - přesto je dokonale přehledný a má teměř referenční charakter. Co se ortodoxních příznivců programování v Basicu na nezastarávajícím stroji Didaktik Gamma - je to docela široká vrstva potenciálních zájemců o VB.NET, ale myslím, že pan Stein lamentuje předčasně. Ještě si v seriálu OOP užije.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Pavel  |  15. 09. 2004 13:28

Ještě jeden dotaz na někoho chytřejšího ... stáhnul jsem si .NET 2.0 a VB 2005, nainstaloval (zabralo to hroznyho mista !) a po klepnutí na File - New Project se mi objevilo okno s Templates, kde ovšem mám pouze možnost Add New Online Templates, která nefunguje :)

Takže jsem zatuhnul hned v úvodu a nemůžu ani ZAČÍT něco dělat ... pls poraďte co mi tam chybí nebo kde je ten pes zakopaný !

Ď.

 

Souhlasím  |  Nesouhlasím  |  Odpovědět
Petrik  |  15. 09. 2004 17:21

Zdravím - sice jsem na tento problém nikdy nenarazil, ale v adresáři C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\VBExpress mám následující adresáře s templates: http://vbnet.aspweb.cz/VBExpressTemplates.zip

Pokud Vám nebudou fungovat v původním umístění, zkuste ZIPy rozbalit a nakopírovat do složky Project templates, uvedené v menu Tools..Options.. VB.NET Express 2005 :

Souhlasím  |  Nesouhlasím  |  Odpovědět
Pavel  |  15. 09. 2004 12:16

Jo je to celkem hezký, jako začátečníkovi s VB.NET se mi to celkem líbí, mám jenom 2 problémky :

1. V čem si uvedené prográmky zkoušet (mám Snippet ale nevím jestli časem nebudu potřebovat nějaké Visual Studio nebo tak něco - přece jenom klasické učebnice VB začínají grafickým prostředím a definicí formulářů a tlačítek apod.)

2. nešlo by zrychlit ? Frekvence 1x týdně je dost pomalá, samozřejmě že koukám i jinam na netu, ale na zive je k dobru minimálně tahle diskuze a výklad v češtině :) ...

Ď.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Petrik  |  15. 09. 2004 16:53

Zdravím - seriál se snažím koncipovat tak, aby byl užitečný i těm, co vývojové prostředí kalibru MS Visual Studia nemají a někteří ani v dohledné době mít nebudou (viz vývojáři v mono pod Linuxem).  Dále, nerad bych věnoval prostor popisu nějakého konkrétního vývojového prostředí, zvlášť když platforma .NET umožňuje (a dokonce podporuje) vývoj alternativních vývojových prostředí, jako je SnippetCompiler nebo SharpDevelop a umožňuje tvořit kód v libovolném textovém editoru (např. vimu nebo emacsu). VB.NET není vývojové prostředí fixované na jedno proprietární IDE od Microsoftu a tuto skutečnost se snažím reflektovat pro co nejširší okruh potenciálních zájemců o VB.NET.

Klasické učebnice VB sice začínají naklikáním úvodních formulářů, ale základní programové konstrukce zůstávají uživateli dlouho skryté. To, co funguje v klasickém VB nemusí ještě fungovat v objektovém rozhraní VB.NET, kde se přece jen více věcí realizuje přímo v kódu, krom toho různá IDE často generují různý kód. Jednoduchou aplikaci v nich naklikáte snadno, ale pak se musíte stejně doučit základní věci - proto jsem se rozhodl začít přímo prací se zdrojovým kódem. Konečně poslední důvod je ten, že VB.NET lze použít docela dobře i jako skriptovací jazyk, pro tvorbu webových služeb a web aplikací, dokonce i pro vývoj DB rozhraní na SQL serveru - je tedy podstatně universálnější, než klasický VB, jehož doména přece jen leží v oblasti desktopových aplikací (tím netvrdím, že zmíněné věci ve VB realizovat nejdou).

Co se frekvence seriálu týče, máte pravdu že týdenní cyklus není pro intenzívní výklad programování nijak mnoho - zkusím tuto záležitost předestřít redakci Živě.

Jinak jsem samozřejmě rád, že máte o seriál zájem a děkuji za link s recencí. Zpětná vazba je důležitá a část připomínek uživatelů jsem už v následujících dílech uplatnil, jak sami uvidíte. Na druhé straně se díly připravují s předstihem a proto není možné reagovat na všechny náměty ihned a v neposlední řadě se nelze zavděčit všem, protože odborníci a profesionálové sledují takový seriál úplně jinýma očima, než začátečník. I já sám jsem musel úvodní díly na žádost redakce zjednodušit a předělávat, čímž se seriál stal poněkud rozvláčnější. Ale to se myslím - jakmile se odpoutáme od úplných základů - určitě časem zlepší.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Petrik  |  14. 09. 2004 18:28

Prostředí .NET zpracovává chyby vzniklé v threadech,  thread-safe komponentách a formulářích a ASP.NET formulářích v událostech OnThreadException a OnApplicationException na systémové úrovni, čehož můžeme využít pro globální zpracování chyb.

V daném případě aplikace při chybném vstupu odchytí výjimku v samostatném threadu a nabídne uživateli zadání správné hodnoty: Aplikace po výskytu chyby vlastně sama sebe restartuje.

Module modMain
  Sub Main
    Dim T As New System.Threading.Thread(AddressOf Vypocet): T.Start()
    AddHandler System.AppDomain.CurrentDomain.UnhandledException, AddressOf OnApplicationException
  End Sub
  Sub OnApplicationException(ByVal S As Object, ByVal UEA As System.UnhandledExceptionEventArgs)
    System.Console.WriteLine(UEA.ExceptionObject.ToString)
    Dim T As New System.Threading.Thread(AddressOf Vypocet): T.Start()
  End Sub
  Sub Vypocet
    System.Console.WriteLine("Zadejte hodnotu poloměru [cm]")
    polomer = System.Console.ReadLine()
    obvod = 2 * 3.1416 * polomer
    System.Console.WriteLine("Obvod kruhu [cm]:")
    System.Console.WriteLine(obvod)
  End Sub
End Module

Souhlasím  |  Nesouhlasím  |  Odpovědět
rychna  |  13. 09. 2004 23:51

Jeste se naucim programovat :)

 

Souhlasím  |  Nesouhlasím  |  Odpovědět
Petrik  |  13. 09. 2004 16:03

Pro srovnání přikládám verzi posledního příkladu v C#.

Syntaxe C# je podobná, jako ve VB.NET, místo příkazů Sub-End Sub / End Try se v C3 používají  složené závorky { } a příkazy jsou ukončovány středníkem. Veškerý kód je uzavřen ve třídách, výchozí veřejná procedura je metoda třídy Main typu void  ("prázdný, neplatný", tedy bez parametrů) a musí být deklarována jako statická (není-li parametrem kompilace učeno jinak). C# rozlišuje velká a malá písmena a to ii v názvech procedur a funkcí (Main() tedy znamená něco jiného, než main()). Veškeré deklarace procedur musí končit závorkami (i když neobsahují žádné parametry.

C# podobně jako Java lpí na silné typové kontrole, všechny proměnné musí být tudíž deklarovány s explicitním uvedením typu, dokonce i číselné konstanty uvedené v textu musí mít vyznačen typ identifikátorem typu (přípona F). Explicitní ani implicitní konverze typu string není podporována, pro převod textového řetězce na číslo na je nutné použít funkci Single.Parse :

class clsMain {
  static void Main() {
    System.Console.WriteLine("Program pro výpočet obvodu kruhu na základě zadané hodnoty poloměru");
    System.Console.WriteLine();
    System.Console.WriteLine("Výpočet probíhá podle vzorce Obvod = 2 * pi * polomer");
    System.Console.WriteLine("Nyní prosím zadejte hodnotu poloměru [cm]");
    string polomer = System.Console.ReadLine();
    try {
      float obvod = 2F * 3.1416F * System.Single.Parse(polomer);
      System.Console.WriteLine("Obvod kruhu [cm]:");
      System.Console.WriteLine(obvod);
      }
    catch {
      System.Console.WriteLine("Byla zadána chybná hodnota poloměru");
    }
  }
}

Souhlasím  |  Nesouhlasím  |  Odpovědět
W.  |  14. 09. 2004 10:55

Tak to je bezva, čtenář se navíc naučí C# :) Snad jen malá poznámka: název "clsMain" neodpovídá konvencím pro názvy typů.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Andrei Badea  |  14. 09. 2004 11:48

číselné konstanty uvedené v textu musí mít vyznačen typ identifikátorem typu

Tak to neni obecne pravda. Kdybyste zde deklaroval promennou obvod jako double a ne float, nemusel byste uvadet zadne F. U konstanty 2 to F nemusi byt tak jako tak. Mimochodem jakeho typu je promenna obvod ve Vasem VB.NET prikladu?

Souhlasím  |  Nesouhlasím  |  Odpovědět
Petrik  |  14. 09. 2004 18:14

Jasně, máte pravdu - děkuji za upozornění ! Takže, přesný ekvivalent ukázky ve VB.NET by v C# vypadal následovně:

 

class clsMain {
  static void Main() {
    System.Console.WriteLine("Program pro výpočet obvodu kruhu na základě zadané hodnoty poloměru");
    System.Console.WriteLine();
    System.Console.WriteLine("Výpočet probíhá podle vzorce Obvod = 2 * pi * polomer");
    System.Console.WriteLine("Nyní prosím zadejte hodnotu poloměru [cm]");
    string polomer = System.Console.ReadLine();
    try {
      double obvod = 2 * 3.1416 * System.Double.Parse(polomer);
      System.Console.WriteLine("Obvod kruhu [cm]:");
      System.Console.WriteLine(obvod);
      }
     catch {
      System.Console.WriteLine("Byla zadána chybná hodnota poloměru");
    }
  }
}

Souhlasím  |  Nesouhlasím  |  Odpovědět
Zasílat názory e-mailem: Zasílat názory Můj názor