HDSoftware Skrevet 19. april 2007 Del Skrevet 19. april 2007 Heisan Jeg har en klasse som trenger å kalle en metode som enda ikke er definert. Denne metoden skal defineres i en annen klasse som instanserer klassen. Litt vanskelig å forklare dette her så jeg får heller gi et eksempel på hvordan jeg gjør det i Clarion. Lettere å se da: ClassA Class Init PROCEDURE SomeFunction PROCEDURE(),BYTE,VIRTUAL END ClassB Class(ClassA) Init PROCEDURE SomeFunction PROCEDURE(),BYTE,VIRTUAL END ClassA.Init PROCEDURE Code Message("SomeFunc Returns " & Self.SomeFunction()) ClassA.SomeFunction PROCEDURE CODE Return 10 ClassB.Init PROCEDURE CODE Parent.SomeFunction() Self.SomeFunction() ClassB.SomeFunction PROCEDURE CODE Return 20 Ok. Dermed kan jeg gjøre slik: dim Instans1 as ClassA dim Instans2 as ClassB Instans1.Init ' Denne vil vise kun 20 Instans2.Init ' Denne vil først vise 10 og så 20 fordi den først kaller Parent instansen Går det an å gjøre noe liknende i VB.NET tro? Ole Lenke til kommentar
HDSoftware Skrevet 19. april 2007 Forfatter Del Skrevet 19. april 2007 Fant det ut selv. OVERRIDE og OVERRIDABLE var løsningen. Ole Lenke til kommentar
GeirGrusom Skrevet 20. april 2007 Del Skrevet 20. april 2007 Pluss at du kan kalle MyBase for å kalle metoden i super klassen. Lenke til kommentar
HDSoftware Skrevet 20. april 2007 Forfatter Del Skrevet 20. april 2007 Fillern!! Jeg opplever problemer her. Nå er det noen av metodene som kalles opp som ikke går gjennom debuggeren. Hva kan det komme av? Rimelig irriterende fordi jeg absolutt trenger å vite hva som skjer med noe data i en av disse metodene. Det rare er at kall ut til andre metoder fanges opp av debuggeren... Bugg i VS kansje? En boot er kansje på sin plass..... Ole Lenke til kommentar
Manfred Skrevet 20. april 2007 Del Skrevet 20. april 2007 Såklart er det ALLTID en bug i programmeringsspråket når det skjer noe litt annet enn hva akkurat DU mener det skal haha Lenke til kommentar
HDSoftware Skrevet 20. april 2007 Forfatter Del Skrevet 20. april 2007 (endret) Nå begynner det å hjelpe. Får fortsatt ikke debugget denne metoden, men jeg har funnet ut at dette med virtuals ikke nødvendigvis er så enkelt. Sjekk følgende kode: Public Class FileManagerClass Private File as IO.FileStream Public AllowCreate as Boolean = True Public sub OpenFile Try me.File = new IO.FileStream("Filename.txt", IO.FileMode.Open) Catch..... if me.AllowCreate Me.File = new IO.FileStream("Filename.txt", IO.FileMode.Create) me.PrepareNewFile() me.WriteFile() End if End Try End sub Public Overridable sub PrepareNewFile End Sub Public sub WriteFile dim Writer as new IO.BinaryWriter(Me.File) <kode som tømmer SortedList til fil> Writer.CLose() End Sub Public sub ReadFile if Me.File is nothing MSGBOX("Me.File IS NOTHING!") End if <resten av koden> End sub Så har jeg i programmet følgende Public Class LocalFileManager Inherits FileManagerClass Public Overrides Sub PrepareNewFile() <kode som legger inn masse poster i en SortedList> End Sub End Class Dermed har jeg så vidt jeg skjønner en Filemanager som kan opprette default poster i en fil. Så i selve programmet så gjør jeg slik: Dim ThisFile as LocalFileManager Public sub New(ByVal pFileName as String) me.ThisFile = new LocalFileManager(pFileName) me.ThisFile.OpenFile() me.ThisFile.ReadFile() End sub Problemet mitt er det at hvis filen ikke eksisterer så vil OpenFile metoden opprette filen. Når koden da kommer til ReadFile så skjer to merkelige ting. 1. Debuggeren klarer ikke gå inn i metoden 2. File objektet som er definert i FileManager er blitt NOTHING og meldingsboksen viser dette Hvis derimot filen eksisterer er alt som det skal. Jeg er jo selvsagt tilbøyelig til å tro at jeg muligens har gjort noe feil her, men ........ Om noen har tips så tar jeg imot med stormende jubel.... Si ifra hvis du vil prøve prosjektet så legger jeg det opp.. På forhånd takk Ole Endret 20. april 2007 av HDSoftware Lenke til kommentar
HDSoftware Skrevet 20. april 2007 Forfatter Del Skrevet 20. april 2007 Dette er SYKT!! Jeg la på en metode til i Filemanager klassen: Public sub R me.ReadFile() End Sub Så byttet jeg ut kallet til ReadFile og vips så får jeg ReadFile med i debuggeren. Dette ligner jo ikke på noe fornuftig i det hele tatt?!?!?!? Ole Lenke til kommentar
Manfred Skrevet 20. april 2007 Del Skrevet 20. april 2007 Garantert noe galt i enten debuggeren eller programmeringsspråket! (Iflg. grunnleggende HDSoftware-logikk) Lenke til kommentar
HDSoftware Skrevet 20. april 2007 Forfatter Del Skrevet 20. april 2007 Fant også det andre problemet selv om jeg ikke helt skjønner hvorfor dette er slik. Sett at du har følgende kode: dim File as IO.FileStream dim Reader as IO.BinaryReader dim Writer as IO.BinaryWriter Hvis du nå har to metoder, en som leser filen og en som skriver filen så virker det som at Reader.Close og Writer.Close forhindrer nye instansieringer via me.file. Må da være noe jeg har missforstått her?!?!? Noen som har bedre erfaring med dette her? Ole Lenke til kommentar
HDSoftware Skrevet 20. april 2007 Forfatter Del Skrevet 20. april 2007 Ok. Ikke mer å henge seg opp i. Jeg skrev om hele greia og fjernet File, Reader og Writer som properties til klassen. La de i stedet inn i den metoden som har bruk for dem og håndterer åpning og lukking i dem i stedet.. Ole Lenke til kommentar
GeirGrusom Skrevet 20. april 2007 Del Skrevet 20. april 2007 Hvis du leser på StreamReader.Close, vil du se at den også lukker underliggende streams. Derfor: Ikke kall StreamReader.Close eller StreamWriter.Close, med mindre du ikke har noen stream (lager filestream med constructoren til en av dem) Lenke til kommentar
HDSoftware Skrevet 20. april 2007 Forfatter Del Skrevet 20. april 2007 Ja, det var vel dette jeg kom frem til også, the hard way ;-) Ole Lenke til kommentar
Manfred Skrevet 20. april 2007 Del Skrevet 20. april 2007 (endret) Dokumentasjon er jo dumt... Endret 20. april 2007 av Manfred Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå