23. juli 2004 - 18:52Der 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 !?!
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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
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)
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
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 ?
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)
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
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
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)
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.