Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse

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

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 av HDSoftware
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...