Jag har byggt ett eget klassbibliotek som heter handbollmanager.dll - denna dll har jag lagt i ett asp.net projekts BIN katalog. Därefter skapat en referens till dll och importerat den i koden (se nedan). Verkar vara något fel på min metod adderaSpelare. Det blev plötsligt tydlig för mig att man bör ha gjort ett gediget jobb med sitt klassbibliotek innan man börjar arbeta med det i en applikation. Klassbiblioteket jag byggt ser ut så här för klassen "LAG" (något förenklat men det viktiga bör framgå): Du deklarerar bara en ny variabel med namnet MV i din konstruktor. Den är bara giltig i konstruktorn. I konstruktorn ? Eller i metoden ? Jag tycker faktiskt att du ska ta och läsa på lite om livslängder på variabler; den här frågan är faktiskt väldigt grundläggande inom programmering Vilket värdelöst svar! Johan, Andreas >> Tack för ditt pedagogiska svar. Google har svar på rätt många frågor men tyvrr måste man ibland anvnda sig av rätt terminologi, vilket kan vara svårt att veta innan man vet (om du fattar) men här borde du hittat nåt... Otrevligt vet jag inte, var då inte menat som otrevligt iaf. ;) Jag måste hålla med Johan angående Onkelborgs svar. Det är så jäkla onödigt med sådana svar, gillar ni inte frågan så strunta i att svara på den. Det är bara att leta upp en annan mer "utmanande" fråga att svara på i stället. Antingen det, eller ge ett vettigt svar... Per,eget klassbibliotek, problem med nullreferenceexception
Trots att jag har anropat konstruktorerna för både "Lag" och "Spelare" får jag NullReferenceException på nedanstående kod. Det är raden med "laget.adderaSpelare(...)" som strular. Någon som kan säga varför?
En annan fråga: Vilken skillnad gör det att skapa en instans genom att använda "Handbollmanager.spelare" eller endast "Spelare" ?
<code>
Imports Handbollmanager
Public Function startHM() As Boolean
Dim spelare1 As Handbollmanager.Spelare
Dim laget As Lag = New Lag()
spelare1 = New Handbollmanager.Spelare("Kim Andersson", "IK Sävehof")
laget.adderaSpelare(spelare1, "H9")
Return True
End Function
</code>Sv: eget klassbibliotek, problem med nullreferenceexception
Någon som har något bra förslag på hur man smidigt kan enhetstesta sitt klassbibliotek innan man börjar köra i en app ?
tack på förhandSv: eget klassbibliotek, problem med nullreferenceexception
<code>
Public Class Lag
Private MV as Collection
Private L_poang as Integer
Public Sub New()
Dim MV as new collection()
L_poang = 0
End sub
Public Function adderaSpelare(ByRef spelare as Spelare, ByVal pos as String) as Boolean
Select Case pos
Case "MV"
MV.Add(spelare)
Return True
Case Else
Return False
End Select
End Function
End Class
</code>
Det som jag identifierat som fel är att när jag anropat konstruktorn New() och kollar i debuggern så är MV, som borde vara av typen Collection, av typen "Nothing". Någonting är alltså fel med att göra på mitt sätt som ovan. Hur skall detta implementeras?? Sv: eget klassbibliotek, problem med nullreferenceexception
Använd:
MV = new collection()
iställetSv: eget klassbibliotek, problem med nullreferenceexception
Blir den då giltig hela objektets livslängd?
Jag förstår inte skillnaden men är det så så är det så...Sv: eget klassbibliotek, problem med nullreferenceexception
Sv: eget klassbibliotek, problem med nullreferenceexception
Med den inställningen kan vi ju lägga ner pellesoft helt och hållet och bara läsa böcker och dokumentationer. Om du nu tycker det var en så dum fråga föreslår jag att du lämnar den helt och hållet och kanske någon annan nappar som vill hjälpa till. Din inställning tycker jag är helt underkänd för att inte säga korkad !
Nu är det ju så att jag vill ha hjälp i just detta specifika fall och då skriver jag en konkret fråga på ett konkret problem med ett konkret kodexempel.
Jag trodde att när man initierade ett objekt med hjälp av konstruktorn att de variabler man definierat i klassen, och som man dimensionerar i konstruktorn skulle leva hela objektets livslängd. Nu verkar det ju inte vara så, så då undrar jag hur man kan göra istället för att upnå detta.
BTW Onkelborg: Du kan vara säker på att jag studerat detta genom att läsa bland annat hjälpfiler i Visual Studio. Eftersom jag inte hittade det jag sökte skrev jag en fråga här istället. Du behör inte bry dig om den här tråden något mer, jag är säker på att det finns andra medlemmar som är intresserade av att hjälpa till.Sv: eget klassbibliotek, problem med nullreferenceexception
Variabler har en viss livstid (eller Scope som det kallas) inom en klass. En variabel som deklareras på klassnivå kan man nå inom hela klassen, en som skapas inom en metod (konstruktorn är en metod) kan bara nås inom metoden etc.
Du är på väldigt god väg när du deklarerar MV på klassnivå, men sen deklarerar du en ny <b>lokal</b> metodvariabel inom din konstruktor. För att komma åt samma <b>MV</b> variabel skriver du
Public Sub New()
MV = New Collection()
L_poang = 0
End sub
Alternative så kan du prefixa med <b>Me</b> för att göra det extra trydligt att det är en variabel som är delad inom hela klassen.
Public Sub New()
Me.MV = New Collection()
L_poang = 0
End sub
Sen vill jag skriva en sak till Oskars "försvar". Visst ska man hjälpa varandra på pellesoft men överlag så ser vi som skriver de flesta svaren att <b>väldigt</b> många nybörjare är extremt lata och bekväma av sig. Det rä tydligen lättare att skriva en fråga här än att plocka upp en bok och läsa. Det finns tyärr inga genvägar om man vill bli en bra programmerare.. alla måste vi gå samma väg och jag är övertygad om att det var det som Oskar syftade lite på.
Säger inte att det är så i ditt fall, men forumet är fyllt med samma frågor om och om igen och väldigt många är på en så grundläggande nivå så man undrar om folk läst något överhuvudtaget innan de frågade - för visst det är väl lättare att fråga än att klura på det ett par dagar =)
Sv: eget klassbibliotek, problem med nullreferenceexception
Jag förstår och håller med det du säger om Oskars svar, i mitt fall har jag lagt många timmar (hela helgen känns det som) och inte lyckats lösa problemet. Har sökt i VS hjälpfiler samt försökt söka i Pellesoft. Då tycker iallfall jag att jag inte förtjänar något, som jag uppfattade det, otrevligt svar av Oskar.
Problemet löst, tråden stängd !!Sv: eget klassbibliotek, problem med nullreferenceexception
en sökning på t.ex. vb.net +variables +lifetime borde gett dig rätt många bra träffar. Även om mycket står i hjälpen och här på PelleSoft så finns inte allt där, på Google hittar man dock det mesta...Sv: eget klassbibliotek, problem med nullreferenceexception
Vad jag syftade på var att det jag såg av din kod var inte ett utav de mest enkla projekt man kan ge sig in på. Mitt inlägg var helt enkelt en fundering från min sida om du kunde grunderna till 100% eller inte. Jag lovar; om man bara tar och ser till att strunta i alla de spännande funktioner som finns i .net/något annat språk och istället läser lite om det lite mer grundläggande sakerna såsom variabel-deklarationer, livslängder etc. så slipper man sådana här problem. :)Sv: eget klassbibliotek, problem med nullreferenceexception
Sv: eget klassbibliotek, problem med nullreferenceexception
Det håller jag inte med om. Om vi bortser från en evt. formulering av ett sådant svar så anser jag att det är mer lämpligt att styra upp en viss sorts av nybörjarfrågor på ett sådans sätt att personen i fråga får studera lite på egenhand och verkligen lära sig något, istället för att få kod som man kan klippa & klista in utan att veta vad som händer.
Jag försöker själv att ge en beskrivande text (som ovan) när jag svarar på den typen av frågor, men ibland hänvisar jag till egenstudier, oftast tillsammans med länkar och lite nyckelord då man ser att personen försöker "cykla innan man kan gå" så att säga.
Hänvisning till självstudier tillsammans med råd kan ge personen en betydligt bättre grund att stå på än ett kodsvar. Som sagt, det är en avvägningsfrågs men definivt inget man skall hoppa över för den saken skull.