Avatar billede websam Nybegynder
23. juli 2004 - 18:52 Der er 19 kommentarer og
1 løsning

Inherits og Imports !

Hejsa,

Er der en venlig sjæl der kan forklare hvad og hvornår Inherits og Imports skal benyttes i vb.net.

Hvis jeg f.eks laver flere componenter i vs.net er der så en af ovenstående der skal benyttes eller skal jeg blot tilgå functions i diverse klasser med følgende :

Dim objCom = New myComponent.myFunction()

Eller :

Dim objCom = New myFunction()

Sidstnævnte virker fint men ofte ser jeg Inherits/Imports i diverse fora indlæg og artikler !?!

/Websam
Avatar billede arne_v Ekspert
23. juli 2004 - 18:58 #1
Inherits bruger du når en klasse skal arve fra en anden klasse
(normal objekt orienteret arv).

Imports importerer et namespace. D.v.s. at hvis du importerer namespace X
kan du i.s.f. det fulde navn nøjes med at skrive det simple navn uden
angivelse af namespace.

Der er lidt forskellig ekonventioner omkring hvornår man bruger fuld navn oghvornår
man bruger Imports.

Vælg det du bedst kan lide.

Hvis du selv skriver koden så bliver du hurtigt glad for Imports, fordi:
- du sparer en del tasten
- koden bliver faktisk mere læselig
Avatar billede websam Nybegynder
23. juli 2004 - 19:13 #2
Ok det giver en del af meningen. Lad os antage at jeg har et komponent der indeholder diverse functions så som denne :

'--- Function der laver Md5 sum af en streng
Public Function GenerateHash(ByVal SourceText As String) As String
    Dim Ue As New UnicodeEncoding()
    Dim ByteSourceText() As Byte = Ue.GetBytes(SourceText)
    Dim Md5 As New MD5CryptoServiceProvider()
    Dim ByteHash() As Byte = Md5.ComputeHash(ByteSourceText)
    Return Convert.ToBase64String(ByteHash)
End Function

og lad os antage at jeg har et andet komponent der tager sig af alt database historie hvor jeg så vil benytte ovenstående function til at cryptere f.eks passwords i en tabel når disse indsættes.

Hvad skal jeg så benytte i min anden klasse inherits eller imports ?

Public Class minAndenClass
    Inherits System.ComponentModel.Component
End Class

Jeg undskylder for min uvidenhed men der er jo en himmel til forskel fra asp til asp.net :o)

/Websam
Avatar billede arne_v Ekspert
23. juli 2004 - 19:19 #3
Hvis den anden klasse er en specialisering af den første klasse så
kan du lade den arve fra den første klasse.

Hvis ikke så må du enten
  instantiere et objekt af den første klasse og kalde funktionen på det
eller
  lave funktionen shared og kalde den på klassen

I begge tilfælde gælder det at:
  - hvis klasserne er i samme namespace er der ingen grund til at importere namespace
  - hvis klasserne er i forskellig namespace kan du importere og bruge simple navne
Avatar billede arne_v Ekspert
23. juli 2004 - 19:19 #4
Mange fremmedord ?
Avatar billede websam Nybegynder
23. juli 2004 - 19:27 #7
ja jeg er ikke helt med ?!? Min opbygning er på følgende måde :

1.
Design lag der viser alt ud af til til brugeren

2.
Buisness lag der indeholder en del functioner til håndtering af diverse inden datatilgang

3.
Database lag der udelukkende arbejder sådan har jeg altid arbejdet med klasisk asp.

Det du skriver med :

"Hvis den anden klasse er en specialisering af den første klasse så
kan du lade den arve fra den første klasse."

Fatter jeg ikke en brik af, men den anden er jeg med på altså ved :

Public Shared Function
    '--- Min kode
End Function

Så behøver jeg ikke lave denne :

Dim objComponent As New myComponent

Men hvor kommer så Imports ind ?!?

/Websam
Avatar billede arne_v Ekspert
23. juli 2004 - 20:19 #8
Imports har ikke noget med funktionalitet at gøre. Det er bare en
måde at brugere kortere navne i koden på.

Objekt orienteret programmering kan godt være lidt tung at komme igang med. Men
har du læst nogle af de links jeg fandt ?
Avatar billede arne_v Ekspert
23. juli 2004 - 20:21 #9
Måske kunne jeg lave et lille eksempel som viste nogle af mulighederne.
Avatar billede websam Nybegynder
23. juli 2004 - 20:28 #10
Ja tak for linkene og jeg kan se erd er er en del at læse på.

Og hvis jeg har forstået det med Imports rigtigt så hvis jeg har et projekt der heder myProject og et Component der heder myComponent så skal jeg skrive følgende eks :

Imports objMy = myProject.myComponent

Mit spørgsmål er så hvordan jeg tilgår en function i klassen er det så på denne måde

objMy.myFunction(ByVal "tekst" As String)

Eller ?

Og du er meget velkommen til at vise et eksempel med Inherets :o) Jeg vil oxo gerne sætte flere point af hvis du vil have flere ?

/Websam
Avatar billede websam Nybegynder
23. juli 2004 - 20:35 #11
Ok nu tror jeg jeg fandt fejlen hvis jeg vil benytte f.eks Imports objMy = myProject.myComponent så skal mine functioner i classen der importeres være shared ellers vil den have en declare på functionen :o)

/Websam
Avatar billede arne_v Ekspert
23. juli 2004 - 20:39 #12
namespace & imports eksempel:

Imports System
Imports NS1

Namespace NS1
    Public Class C
        Public Shared Sub m()
            Console.WriteLine("NS1.C")
        End Sub
    End Class
End Namespace

Namespace NS2
    Public Class C
        Public Shared Sub m()
            Console.WriteLine("NS2.C")
        End Sub
    End Class
End Namespace

Namespace DefaultNamespace
    Class MainClass
        Public Shared Sub Main(ByVal args As String())
            ' eksplicit NS1
            NS1.C.m
            ' eksplicit NS2
            NS2.C.m
            ' NS1 p.g.a. import
            C.m
        End Sub
    End Class
End Namespace
Avatar billede arne_v Ekspert
23. juli 2004 - 20:39 #13
Output:

NS1.C
NS2.C
NS1.C
Avatar billede arne_v Ekspert
23. juli 2004 - 20:39 #14
Inherits eksempel kommer.

(sorry for console kode eksempler men jeg gør ikke meget i ASP.NET)
Avatar billede arne_v Ekspert
23. juli 2004 - 20:45 #15
Imports System

Public Class Parent
    Public Shared Sub m1()
        Console.WriteLine("m1")
    End Sub
    Public Sub m2()
        Console.WriteLine("m2")
    End Sub
End Class

Public Class Child
Inherits Parent
    Public Shared Sub m3()
        Console.WriteLine("m3")
    End Sub
    Public Sub m4()
        Console.WriteLine("m4")
    End Sub
End Class

Class MainClass
    Public Shared Sub Main(ByVal args As String())
        ' statiske metoder
        Child.m1
        Child.m3
        ' ikke statiske metoder
        Dim c As Child = New Child
        c.m2
        c.m4
    End Sub
End Class
Avatar billede arne_v Ekspert
23. juli 2004 - 20:45 #16
Output:

m1
m3
m2
m4
Avatar billede arne_v Ekspert
23. juli 2004 - 20:46 #17
Du ser at Child klassen arver alle metoder fra Parent klassen.
Avatar billede websam Nybegynder
23. juli 2004 - 20:47 #18
Der helt i orden jeg har fanget den del med namespace den skiller der hvor man ikke vælger at benytte shared function har lige testet både med og uden shared og det virker kun med shared. Så fik jeg da den banket ind i hovedet :o)

/Websam
Avatar billede websam Nybegynder
23. juli 2004 - 21:02 #19
Jeg takker for hjælpen for denne gang, point på vej :o)
Avatar billede websam Nybegynder
23. juli 2004 - 21:02 #20
og du fik lige 30 mere :o)
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
Kurser inden for grundlæggende programmering

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