Hejsan Om du med objekt menar klasser med olika egenskaper etc så är det inga problem... Precis vad jag menade! tusen tack för svaret Det finns ingen add-metod på arrayer, där måste du själv sätta in elementet på rätt plats : Precis som Hultan skrev...Kan man göra så?
Nybörjaren här igen. Sitter och skiftar mellan C# och VB.NET men hittar ingenstans om man kan tillverka objekt dynamiskt? Alltså skulle vilja tillverka ett objekt tex bil med tillhörande metoder,properties, fält odyl och sedan när man trycker på en knapp i ett formulär skapa en instans eller ett nytt objekt (samma sak väl?) av denna som ärver alla egenskaper odyl men heter det namn och får de värden som man angivit i textrutor! tex ett objekt som heter "Jaguar" med "200hk" ett annat som heter "Fiat" "55hk" osv, som alla har ärvt från klassen Bil och alltså tillverkats dynamiskt av användaren.
Kan man göra så? eller måste man göra som jag gjort nu skapat en array av objekt som jag initierar redan från start? känns lite onödigt deklarera 200 olika objekt när man kanske sedan bara kommer att använda en 10st.
Ok hoppas ni förstod vad jag menade :)
Tackar så mycket
/AndySv: Kan man göra det?
I koden kan du till exempel skriva något i stil med...
Kanske under en knapp eller liknande...
Sedan har du en arraylist eller collection dit du bara slänger in instansen av klassen "Bil.
Säg att arraylisten heter "BilCollection"
<code>
Dim BilInstans As New Bil
BilInstans.Marke = "Fiat"
BilInstans.HK = "200hk"
BilCollection.Add(BilInstans)
</code>
Du kan även göra egna collections som enbart tar emot din bilklass eller en Interface...
Var det det du undrade över eller var det något helt annat?
Mvh,
ThomasSv: Kan man göra det?
Kunde dock inte hitta den här metoden Add till arrayen. Deklarerade Arrayen så här : Dim bilArray() as bil och det är väl rätt? Det kanske bara fungerar med det du kallar collections? får läsa in mig på collections.
Tack för svaret ivarjefallSv: Kan man göra det?
<code>
Dim a() As Bil=new Bil(10) ' Deklarera och initiera arrayen
Dim b As Bil=new Bil() ' Skapa bil-instansen
b.AntalHjul=4 ' :-)
b.DåligFörare=true ' :-)
a(4)=b ' Sätt in bilen på platsen med index 4
</code>
Med Collections kan det se ut så här :
<code>
Imports System.Collections
Dim a As New System.Collections.ArrayList() ' Skapa en arraylist
' (en upphottad array-klass,
' med lite godis som t ex sortering)
Dim b As Bil=new Bil() ' Skapa bil-instansen
b.AntalHjul=4 ' :-)
b.DåligFörare=true ' :-)
a.Add(b) ' Sätt in bilen på första plats i arrayen
</code>
En annan klass under System.Collections är Hashtable som ger dig möjlighet att lagra en nyckel tillsammans med objektet. Om du t ex lagrar bilar så kan ju registreringsnummer vara nyckel eftersom det är unikt (i alla fall inom sverige), och för personer kan personnumret vara nyckel. Du kan sedan lätt hämta rätt objekt om du vet nyckeln (väldigt bra prestanda på att hämta element från en Hashtable, inte fullt så snabb på att lägga in objekt) :
<code>
Imports System.Collections
Dim a As New System.Collections.Hashtable() ' Skapa en Hashtable
Dim b As Bil=new Bil() ' Skapa bil-instansen
b.AntalHjul=4 ' :-)
b.DåligFörare=true ' :-)
a.Add("ABC 123",b) ' Sätt in bilen i tabellen och associera den med
' registreringsnumret "ABC 123"
b=Nothing ' Töm b
b=DirectCast(a("ABC 123"),Bil) ' Hämta bilen med reg nr "ABC 123" samt
' typkonverterar till typen Bil. Nödvändigt om
' du har Option Strict On (rekommenderas) eftersom
' hashtablen returnerar objektet som en System.Object.
</code>
Det finns andra intressanta klasser under System.Collection men dessa två är de som jag använder mest. Lycka till...Sv: Kan man göra det?
Du kan dock skriva egna Collections också genom att ärva från någon collection eller implementera olika interface...
<code>
Public Class EmailCollection
Inherits ArrayList
Public Shadows Sub Add(ByVal Item As Bil)
MyBase.Add(Item)
End Sub
Public Shadows Sub Insert(ByVal Index As Integer, ByVal Item As Bil)
If Index < 0 Then MyBase.Insert(0, Item) : Exit Sub
If Index >= Count Then Add(Item) : Exit Sub
MyBase.Insert(Index, Item)
End Sub
Public Shadows Sub Remove(ByVal Item As Bil)
MyBase.Remove(Item)
End Sub
Public Shadows Sub RemoveAt(ByVal Index As Integer)
If Index < 0 Or Index >= Count Then Exit Sub
MyBase.RemoveAt(Index)
End Sub
Default Public Shadows Property Item(ByVal Index As Integer) As Bil
Get
If Index < 0 Or Index >= Count Then Exit Property
Return MyBase.Item(Index)
End Get
Set(ByVal Value As Bil)
If Index < 0 Or Index >= Count Then Exit Property
MyBase.Item(Index) = Value
End Set
End Property
End Class
</code>
Ovanstående är en liten grund till en egen ArrayList som tar emot och retunerar objekt av typen Bil, inte Object som det blir om du bara skriver Dim List As New ArrayList...
Används såhär...
<code>
Dim BilLista As New BilCollection
Dim Bil As New Bil
Bil.Color = "Svart"
Bil.Mark = "Peugeot"
Bil.YearModell = 1988
BilLista.Add(Bil)
</code>
Men ovanstående exempel är bara exempel hur man kan göra, det finns flera sätt och vilken man väljer är beroende på vad man behöver etc...
Mvh,
Thomas