Avatar billede torotune Nybegynder
08. april 2006 - 14:42 Der er 14 kommentarer og
1 løsning

Nedarvning fra klasse

Hej,

Hvis jeg har en default.aspx
og den har en CodeFile="default.aspx.vb".

Fra default.aspx.vb ønsker jeg at tilgå noget
globalt kode/subs som står i kode.vb som ligger i App_Code-mappen.

Hvordan nedarver jeg så jeg kan tilgå kode liggende i kode.vb?
Avatar billede snepnet Nybegynder
08. april 2006 - 14:49 #1
hvis du har en klasse i en fil under app_code - kan du blot instantiere den der hvor du vil bruge den - som du gør med andre klasser.
har du lagt den i et namespace - skal du skrive det med, eller sætte en Imports namespacenavn øverst i din fil.
hvad er det du har liggende der, siden du skriver om arv?
mvh
Avatar billede torotune Nybegynder
08. april 2006 - 15:02 #2
Hej - okay, ved ikke om man kan kalde det "arv" men det er fordi jeg fra min codebehind-fil til min form gerne vil kalde nogle fastsatte variabler og subs som f.eks kalder dato/tid og formaterer det, som jeg skal bruge på flere sider gennem hele min applikation.

Så vil jeg gerne at jeg bare f.eks. i min default.aspx.vb eller hvilken som helst anden codebehind-fil kan skrive.

Sub page_load()
  hentdato()
End sub

SelveHentdato() ligger så i kode.vb i App_code-mappen.
Avatar billede torotune Nybegynder
08. april 2006 - 15:20 #3
Så jeg har nu i codebehind-filen:

Imports Microsoft.VisualBasic

Partial Class default
    Inherits System.Web.UI.Page
    Private default As kode

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)  Handles Me.Load
        hentdato()
    End Sub
End Class

I kode.vb klassen har jeg:

Public class kode : inherits page

Sub hentdato()
'kode
end sub

End class

Men den sige stadig at hentdato() ikke er declared - selvom den jo burde hente den fra App_code
Avatar billede snepnet Nybegynder
08. april 2006 - 15:26 #4
hvis du skal kalde metoden med det du har lavet - skal du have en instans af klassen kode, som du forøvrigt nedarver fra page (hvordan kan det være?).

Dim kode as New kode()
kode.hentdato() 'husk at hentdato skal være public i din klasse kode

en dato kan du få med DateTime.Now

mvh
Avatar billede torotune Nybegynder
08. april 2006 - 15:40 #5
Ah okay, jeg tror jeg er ved at være med.

Jeg får dog en

'kode' is ambiguous.

ved Dim kode as New kode().

Jeg nedarver fra page, fordi ellers så sætter den fejl hvis jeg laver en response.write("et eller andet") på min side. Så er "response" pludselig ikke declared.
Avatar billede snepnet Nybegynder
08. april 2006 - 15:48 #6
response.write skal du ikke bruge til noget - den kan du sådan bare glemme.
vil du gennemtvinge brug af den fra klasser rundt omkring i din applikation (som ikke baseret/nedarvet fra Page) kan du gøre sådan her:
HttpContext.Current.Response.Write("...")
prøv at lav en søgning, og se om du har andre "ting" der hedder kode
mvh
Avatar billede snepnet Nybegynder
08. april 2006 - 15:49 #7
og under alle omstændingheder - lad være med at basere dine logik-klasser på Page.
mvh
Avatar billede torotune Nybegynder
08. april 2006 - 16:48 #8
Der var en UserControl et sted der havde "kode" som prefix.

Okay, men det er også sådan noget som "request" som ikke genkendes når jeg ikke nedarver fra Page.

Jeg tror jeg er ved have det til at virke, men jeg skal så sætte "kode." foran alt hvad jeg anvender fra den klasse i mine codebehind-filer, alle metoder og variabler?

Hvordan kan jeg forresten hente klassen ind via Imports namespacenavn ?
Avatar billede torotune Nybegynder
08. april 2006 - 17:01 #9
De steder hvor jeg sætter "kode." foran i min codebehind laver en

"Reference to a non-shared member requires an object reference."
Avatar billede snepnet Nybegynder
08. april 2006 - 17:02 #10
request får du fat i på samme måde:
HttpContext.Current.Request
og det er nok en fordel hvis du sørger for at dit objekt ikke har samme navn som klassen:
Dim objKode as kode = new kode()
og ja - du skal så sætte variablens navn foran dine kald:
objKode.hentdata()
mvh
Avatar billede snepnet Nybegynder
08. april 2006 - 17:04 #11
(er ikke god til vb - beklager)
Avatar billede torotune Nybegynder
09. april 2006 - 23:48 #12
Okay, det virker helt fint! Så fik jeg da lært lidt mere :-)
Hvordan kan jeg hente klassen ind via Imports namespacenavn?

Smid et svar!
Avatar billede snepnet Nybegynder
10. april 2006 - 01:42 #13
du kan bare skrive Imports namaspacenavn øverst i file (sammen med de andre andre imports). du skal så bruge det namespace der står i din klasse i app_code (hvis der står et).
mvh
Avatar billede torotune Nybegynder
14. april 2006 - 17:14 #14
Okay, jeg prøver. Tak for hjælpen denne gang :-)
Avatar billede snepnet Nybegynder
14. april 2006 - 20:07 #15
sig til hvis der er ballade.
mvh
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
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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