Just nu i M3-nätverket
Gå till innehåll

Arv i klasser


nickeLa

Rekommendera Poster

Hej!

 

Är en slite VB programmerare som försöker förbättra min kunskaper i objektorientering. Med blandat resultat. Jag undrar följnade:

 

Vill skapa en klass för att hantera textinformation på en sajt, den ser ut så här(enkelt förklarat)

 

Class News

Properties:

Id

Rubrik

Text

 

Metod:

Spara (sparar till en databas)

Visa (hämtar från databas)

 

Detta fungerar. men nu vill jag utöka detta med Arv. Jag vill skapa en ny klass som heter ExtendedNews

 

då ärver jag alla poperties och lägger till några nya. Men hur uppdaterar jag databasen? Om jag använder metoden Spara från min basklass sparas ju naturligtvis inte mina nya properties. Hur går man tillväga i detta fall? vad är gängse sätt att fixa detta på?

 

Tack för all hjälp.

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Metoden i basklassen deklarerar du som Overridable och i den ärvda klassen anger du dess motsvarande metod som Overrides:

 

I basklassen:

 Public Overridable Sub Save()
       End Sub

 

I ärvd klass:

            Public Overrides Sub Save()
           End Sub

 

Länk till kommentar
Dela på andra webbplatser

Hej Anjuna!

 

Tack för ditt svar.

 

Att jag använde override har jag klurat ut men titta här på min förenklade/påhittade savemetod i min basklass:

 

public Overridable function Save()

sql= "insert into [nyhet] (rubrik, text) Values('test', 'test')"

'dbconnection etc...

end function

 

 

i min utökade klass finns ytterligare en property: Url

 

Hur gör jag nu?

 

public overrides function save()

' jag kan väl inte skapa en ny connection för min nya property "URL"?

' skall "URL" definieras i min basklass' SQL sats? - då fattar jag men det gör det hela mindre flexibelt

end function

 

Ursäkta min dumhet, men det är spännande att lära sig nya saker, jag älskar AHA upplevelser :)

 

 

 

 

 

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Exempel:

oNews deklareras som en nyhet av vanlig typ. Där anropas Save() i basklassen.

oExtNews är en instans av den ärvda klassen. När du anropar Save på denna exekveras aldrig motsvarande metod i basklassen

 

[log]

   Friend Class News
       Public Rubrik, Text As String
       Public Overridable Sub Save()
           Dim sql As String = "insert into [nyhet] (rubrik, text) Values('" & Rubrik & "', '" & Text & "')"
           MsgBox(sql)
       End Sub

   End Class
   Friend Class ExtendedNews
       Inherits News
       Public URL As String
       Public Overrides Sub Save()
           Dim sql As String = "insert into [nyhet] (rubrik, text) Values('" & Rubrik & "', '" & Text & "','" & URL & "')"
           MsgBox(sql)
       End Sub
   End Class

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Dim oNews As New News()
       oNews.Rubrik = "RubrikNormal"
       oNews.Text = "TextNormal"
       Dim oExtNews As New ExtendedNews()
       oExtNews.Rubrik = "RubrikExt"
       oExtNews.Text = "TextExt"
       oExtNews.URL = "www.www.se"
       oNews.Save()
       oExtNews.Save()
   End Sub

[/log]

 

Länk till kommentar
Dela på andra webbplatser

Anjuna:

 

Jag älskar AHA upplevlser skrev jag i min fråga...så här kommer det:

 

AHA!!!

 

Tusen tack för att gjort detta klart för mig :thumbsup:

 

 

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...