' Šablona položky "Blank Page" je popsána na adrese  http://go.microsoft.com/fwlink/?LinkId=234238

''' <summary>
''' Prázdné stránka, která může být použita samostatně, nebo v rámci prvku Frame.
''' </summary>
Public NotInheritable Class MainPage
    Inherits Page
    'Deklarace konstanty pro zakladni slevu 8,5% (prihlasky pres web)
    Public Const slevaWebovaPrihlaska As Double = 0.085
    'Deklarace konstanty pro slevu 14% (pokracujici zaci)
    Public Const slevaPokracujiciZak As Double = 0.14

    Public Class ZakladniSleva
        'Deklarace nove tridy ZakladniSleva, obsahujici metodu VypocitejSlevu
        'Diky klicovemu slovu Overridable, pouzitemu pri deklaraci metody,
        'umoznuje prekryti teto metody
        Overridable Function VypocitejSlevu(ByVal Castka As Double) As Double
            'Vypocet zakladni slevy v pripade registrace online
            Return Castka * slevaWebovaPrihlaska
        End Function
    End Class

    Public Class VysokaSleva
        'Deklarace nove tridy VysokaSleva, upravujici metodu tridy ZakladniSleva
        'Klicove slovo Inherits musi byt na prvnim radku kodu tridy
        Inherits ZakladniSleva
        'Deklarace lokalni promenne pro ulozeni vysledku vypoctu
        Private pocatecniSleva As Double

        'Tato upravena metoda VypocitejSlevu prekryva tutez metodu
        'bazove tridy v pripade, ze je pouzito klicove slovo Overrides
        Public Overrides Function VypocitejSlevu(ByVal Castka As Double) As Double
            'Pouziti klicoveho slova MyBase v tomto kodu vytvari
            'odkaz na bazovou tridu
            'Vypocet slevy dle bazove tridy je prvni, avsak pote nasleduje
            'upraveny vypocet
            pocatecniSleva = MyBase.VypocitejSlevu(Castka)
            'Cilem ale je vraceni celkove "vysoke" slevy (ci vice hodnot slev)
            Return (slevaPokracujiciZak * Castka) + pocatecniSleva
        End Function
    End Class

    'Procedura ZobrazUspory vypocitava castku, kterou zak usetri
    'na cene kurzu. Sleva je zobrazena v textovem poli stranky.
    'Procedura pracuje se dvema argumenty, objektem typu ZakladniSleva
    'a celkovou cenou kurzu, z niz by mela byt vypocitana sleva.

    Sub ZobrazUspory(ByVal Polozka As ZakladniSleva, ByVal CelkovaCena As Double)
        'Vsimnete si podpory polymorfismu: ackoliv prvni argument vola objekt
        'typu ZakladniSleva, objekt typu VysokaSleva take funguje
        Dim vyseSlevy As Double
        vyseSlevy = Polozka.VypocitejSlevu(CelkovaCena)
        TextovePoleVystup.Text = TextovePoleVystup.Text & "Celková sleva ze " _
            & "školného: " & CelkovaCena.ToString("C") & " činí: " _
            & vyseSlevy.ToString("C") & vbCrLf
    End Sub

    Private Sub TlacitkoTest_Click(sender As Object, e As RoutedEventArgs) Handles TlacitkoTest.Click
        'Deklarace objektu, souvisejicich s novymi tridami
        Dim webovaObjednavka2014 As New ZakladniSleva
        Dim pokracStudentObjednavka2014 As New VysokaSleva

        'Volani procedury ZobrazUspory pro vypocet celkove slevy ze skolneho
        've vysi 1200,- Kc.
        'Prvni volani vypocitava standardni slevu v pripade objednavky online
        ZobrazUspory(webovaObjednavka2014, 1200)
        'Druhe volani vypocitava slevu v pripade pokracujiciho zaka
        'a objednavky online
        ZobrazUspory(pokracStudentObjednavka2014, 1200)
    End Sub

End Class





