Avatar billede super_g Nybegynder
23. november 2003 - 01:35 Der er 4 kommentarer og
1 løsning

Inherit Class, men brug ny konstant.

Jeg har simplificeret min kode og har nu:

    Class HeliumBallon
        Inherits Ballon
        Const GasArt As String = "Helium"
    End Class

    Class BrintBallon
        Inherits Ballon
        Const GasArt As String = "Brint"
    End Class

    Class Ballon
        Const GasArt As String = "Ingen gas"

        Public Shared Function Gas() As String
            Return GasArt
        End Function
    End Class


Mit problem er så, at jeg gerne vil kalde Ballon.Gas og få "Ingen Gas", men samtidigt vil jeg også gerne kalde BrintBallon.Gas og få "Brint".. Men jeg ved bare ikke hvordan jeg skal gøre det.. Jeg vil helst undgå at skulle til at lave alt for meget om på min BrintBallon og HeliumBallon (da jeg i min originale kode bruger en del flere og mere komplekse classer). Det hele ville ikke volde mig så store problemer, hvis ikke min Ballon.Gas-funktion var shared, men det er den nu engang.

Hvad kan jeg skrive i stedet for mine Const-linier, så det virker ?
Avatar billede super_g Nybegynder
23. november 2003 - 01:37 #1
Det skal så også lige siges, at grunden til at min Gas er shared, er fordi den skal kunne kaldes uden at jeg skal til at: Dim asdf as New BrintBallon
Avatar billede burningice Nybegynder
23. november 2003 - 19:41 #2
kan du ikke bare have en private shared GasArt-string i din Ballon-klasse som du så overrider i dine to andre klasser?
Avatar billede super_g Nybegynder
23. november 2003 - 20:20 #3
Fandt ud af at man ikke både kan override og share en funktion pga noget med noget v-table..

Men jeg fandt en vej uden om problemet.. Godt nok mere bøvlet..
Jeg lavede Ballon.Gas om til public og tilføjede en public shared i min BrintBallon, som så lavede en ny instance af BrintBallon, som så kaldte Gas.. Bøvlet, men det virker.
Avatar billede arne_v Ekspert
23. november 2003 - 20:58 #4
Lidt sent.

Men den objektorienterede løsning er:

Imports System

Public MustInherit Class Baloon
    Public MustOverride Function GetGas() As String
End Class

Public Class HydrogenBaloon
Inherits Baloon
    Public Overloads Overrides Function GetGas() As String
        Return "Hydrogen"
    End Function
End Class

Public Class HeliumBaloon
Inherits Baloon
    Public Overloads Overrides Function GetGas() As String
        Return "Helium"
    End Function
End Class

Class MainClass
    Public Shared Sub Main(ByVal args As String())
        Dim b1 As Baloon = New HydrogenBaloon
        Dim b2 As Baloon = New HeliumBaloon
        Console.WriteLine(b1.GetGas + " " + b2.GetGas)
    End Sub
End Class
Avatar billede super_g Nybegynder
25. november 2003 - 18:24 #5
Functionen skal jo være shared.. Netop så man ikke skal til at oprette en ny ballon for at få fat i den funtion.. Det er nemlig det, der har været det store problem... Men fandt en lidt fusker måde at løse problemet.. Thx anyway.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester