Hur kan jag sätta värdet id i klassen typ? Päringe, sorry! Päringe, Public Class objekt Päringe,Komma åt egenskap på class som skapas i en annan class?
Skapar classen typ i classen test.
Har försökt med
Dim test As New ObjektLogic.test(dbconnection)
test.typ.id = 5
men får då felmeddelandet:
Object reference not set to an instance of an object
obs har inte tagit med all kod.
public class test
Dim typ As New ObjektLogic.typ(dbconnection)
Public Property typ() As typ
Get
Return m_typ
End Get
Set(ByVal Value As typ)
m_typ = typ
End Set
End Property
end class
public class typ
Public Property id() As integer
Get
Return m_id
End Get
Set(ByVal Value As integer)
m_id = value
End Property
end classSv: Komma åt egenskap på class som skapas i en annan class?
I din <b>Test</b> klass skapar du en variabel med namnet <b>typ</b>, men i ditt <b>Typ</b> property returnerar du en variabel som heter <b>m_typ</b>. När du programmerar i VB.NET så ta för vana redan från början att lägga till
Option Explicit On
Option Strict On
Detta gör att du indviker denna typen av misstag. Läs med i dokumentationen om de båda inställningarna om du inte känner till dess innebörd, men det är min fullaste åsikt att inget VB.NET program borde skrivas utan dem påslagna - det borde vara så som standard, med möjligheten att stänga av dem om man har en riktig god anledning.
Sv:Komma åt egenskap på class som skapas i en annan class?
Jag returnerar typ i min originalkod.
men det funkar ändå inte! Sv: Komma åt egenskap på class som skapas i en annan class?
Vänligen visa orginalkod + koden för att anropa det hela.Sv:Komma åt egenskap på class som skapas i en annan class?
'har inte tagit med alla egenskaper och privata variabler.
Public Sub New(ByVal DBConnection As String)
MyBase.New(DBConnection)
Dim typ As New ObjektLogic.typ(DBConnection)
PopulateDefault(typ)
End Sub
Public Property typref() As typ
Get
Return typref
End Get
Set(ByVal Value As typ)
typref = Value
End Set
End Property
Public Function GetObjekts(ByVal dbconnection As String) As ArrayList
cn.Open()
cmd.CommandText = (sql)
Dim objReader As MySqlDataReader = cmd.ExecuteReader()
' create the ArrayList that the method will return
Dim alList As New ArrayList
While objReader.Read()
' create a new objekt object
Dim objekt As New ObjektLogic.objekt(dbconnection)
' assign the database values to the object's properties
objekt.id = objReader.GetInt32(0)
objekt.datum = objReader.GetDateTime(1)
objekt.namn = objReader.GetString(2)
objekt.typref.id = objReader.GetInt32(3) 'här får jag felmeddelandet
objekt.typref.typ = objReader.GetString(15)
' add the objekt object to the ArrayList
alList.Add(objekt)
End While
objReader.Close()
cn.Close()
' return the finished ArrayList with objekt objects
Return alList
End Function
End Class
Public Class typ
Private m_id As Integer
Private m_typ As String
Public Sub New(ByVal DBConnection As String)
MyBase.New(DBConnection)
End Sub
Public Property id() As Integer
Get
Return m_id
End Get
Set(ByVal Value As Integer)
m_id = Value
End Set
End Property
Public Property typ() As String
Get
Return m_typ
End Get
Set(ByVal Value As String)
m_typ = Value
End Set
End Property
end class
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
Dim objekt As New ObjektLogic.objekt(DBConnection)
dtObjects.DataSource = objekt.GetObjekts(DBConnection)
dtobjects.DataBind()
End SubSv: Komma åt egenskap på class som skapas i en annan class?
Ännu en gång vill jag återvända till mitt inlägg om att <b>alltid</b> använda dig av så väl <b>Option Explicit</b> så som <b>Option Strict</b> i dina VB.NET program. Om du nu har klippt in din riktiga kod i ditt senaste inlägg så är problemet det samma som jag hänvisade tidigare.
I din konstruktor till klassen <b>Test</b> så deklarerar du en <b>lokal</b> variabel (du kommer inte att kunna nå denna utan för konstruktorn, så fort du lämnar konstruktorn så kommer den försvinna) med namnet <b>typ</b> och sedan från ditt <b>typref</b> property returnerar du en variabel med namnet <b>typref</b>.
Så vad du måste göra är att <b>deklarera</b> din variabel på <b>klassnivå</b>, <b>tilldela</b> den sitt värde i din <b>konstruktor</b> och <b>returnera</b> den från ditt <b>property</b>. Givitvis gör du allt detta med Option Explicit och Option Strict påslagna.
Public Sub New(ByVal DBConnection As String)
MyBase.New(DBConnection)
Dim typ As New ObjektLogic.typ(DBConnection)
PopulateDefault(typ)
End Sub
Public Property typref() As typ
Get
Return typref
End Get
Set(ByVal Value As typ)
typref = Value
End Set
End Property