webForumDet fria alternativet

Klasser

.NETur .NET

4 svar · 469 visningar · startad av Fraggel

Medlem sedan sep. 2003301 inlägg
Frågan#1

Hej !

Håller på med ett litet sidoprojekt och försöker lära mig VB.Net samtidigt!

Jag har problem med följande

Jag har skapat två klasser

player och tournament

player har just nu 3 propertys
sname fname och eMail

tournament
m_players (en array som jag vill skall innehålla en massa spelare)
count (Return m_players.Count)
add (m_players.Add(newPlayer))

Public Class player
    Private m_sName As String
    Private m_fName As String
    Private m_eMail As String
    Private m_pID

    Public ReadOnly Property playerID()
        Get
            Return m_pID
        End Get
    End Property
    Public Property sName() As String
        Get
            Return m_sName
        End Get
        Set(ByVal value As String)
            m_sName = value
        End Set
    End Property
    Public Property fName() As String
        Get
            Return m_fName
        End Get
        Set(ByVal value as String)
            m_fName = value
        End Set
    End Property

    Public ReadOnly Property name()
        Get
            Return m_fName & " " & m_sName
        End Get
    End Property

    Public Property eMail()
        Get
            Return m_eMail
        End Get
        Set(ByVal value)
            m_eMail = value
        End Set
    End Property
End Class
Public Class tournament
    Private m_players As System.Collections.ArrayList
    Public Sub New()

    End Sub

    Public ReadOnly Property count() As Integer
        Get
            Return m_players.Count
        End Get
    End Property

    Public Sub Add(ByVal myPlayer As player)
        m_players.Add(myPlayer)
    End Sub
End Class

Detta vill jag göra.
Ja jag har deklarerar klasserna i koden

        myPlayer.fName = "stewe"
        myPlayer.sName = "Lundin"
        myTournament.Add(myPlayer)
Medlem sedan dec. 19996 522 inlägg
#2

Och vad händer?

Medlem sedan sep. 2003301 inlägg
#3

Hmm glömde visst det viktigaste...

Public Sub Add(ByVal myPlayer As player)
        [b]m_players.Add(myPlayer)[/b]
    End Sub

Smäller med felmeddelande NullReferenceExeption was unhandled

Medlem sedan sep. 20011 914 inlägg
#4

Osäker hur det ser ut i "hobbyspråket", men något så här iaf.

Public Class Tournament
    Private m_players As List(Of Player)
    Public Sub New()
       m_players = New List(Of Player)
    End Sub

   Public Property Players() As List(Of Player)
        Get
            Return m_players
        End Get
        Set(ByVal value As Players)
            m_players = value
        End Set

    End Property
End Class

Public Class Player
    Private m_sName As String
    Private m_fName As String
    Private m_eMail As String
    Private m_pID

    Public ReadOnly Property playerID()
        Get
            Return m_pID
        End Get
    End Property
    Public Property sName() As String
        Get
            Return m_sName
        End Get
        Set(ByVal value As String)
            m_sName = value
        End Set
    End Property
    Public Property fName() As String
        Get
            Return m_fName
        End Get
        Set(ByVal value as String)
            m_fName = value
        End Set
    End Property

    Public ReadOnly Property name()
        Get
            Return m_fName & " " & m_sName
        End Get
    End Property

    Public Property eMail()
        Get
            Return m_eMail
        End Get
        Set(ByVal value)
            m_eMail = value
        End Set
    End Property
End Class
Dim myplayer as new Player
myPlayer.fName = "stewe"
myPlayer.sName = "Lundin"

Dim tour as new Tournament
tour.Players.Add(myPlayer)

Dim antal as Integer = tour.Players.Count
Medlem sedan maj 20012 812 inlägg
#5

Fraggel skrev:

Smäller med felmeddelande NullReferenceExeption was unhandled

Det beror på att du inte har instansierat m_players. När du försöker anropa metoden Add() på m_player så letar datorn upp den instans av din klass som du vill lägga spelaren till (du kan med andra ord, ha flera olika listor med spelare om du vill). Om du då inte har instansierat listan så kommer det ju inte finnas någon lista att lägga spelaren till, och därför får du NullReferenceExeption, din m_player är helt enkelt NULL.

Precis som Dino skriver i koden så måste du innan du försöker göra något med din lista instansiera den med m_players = New List(Of Player)

- M

132 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)