Toon posts:

[VB.NET 2005] Property wordt niet herkend*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Besten,

Ik heb een klasse "Naam" aangemaakt met als argumenten de voor- en achternaam.
Als ik in de mainklasse een variable aanmaak via de constructor, lukt dit, maar als ik deze variable na de constructor wil gebruiken, lukt dit niet meer.
Hij herkent de variable niet meer als een type "Naam". ( test.LastName() herkent hij niet )

Wat heb ik hier verkeerd gedaan?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Class MainForm
    Dim test As New Name("Karolien", "Van Het Hof")
    Dim bla As String
    bla = test.LastName()
End Class

Public Class Name
    Private _FirstName As String
    Private _LastName As String
    Public Property FirstName() As String
        Get
            Return _FirstName
        End Get
        Set(ByVal value As String)
            _FirstName = value
        End Set
    End Property
    Public Property LastName() As String
        Get
            Return _LastName
        End Get
        Set(ByVal value As String)
            _LastName = value
        End Set
    End Property
    Public Sub New(ByVal FirstName As String, ByVal LastName As String)
        Me.FirstName = FirstName
        Me.LastName = LastName
    End Sub
End Class

  • Invisible_man
  • Registratie: Juni 2006
  • Laatst online: 14-02 09:15
public maken ipv private.

Edit: Sorry, te snel beoordeeld, je gebruikt z'n get-set functie. Je zou het ook gewoon kunnen proberen om je variabele zelf public te maken en dus geen get-set functie toepassen.

Maar je hebt hier staan: Set(ByVal value As String)

Volgens mij hoef je bij Set geen type aan te geven, die is verder naar boven al aangegeven. Dus Set zonder de haakjes enzo.

[ Voor 111% gewijzigd door Invisible_man op 04-07-2006 23:22 ]


  • MMUilwijk
  • Registratie: Oktober 2001
  • Laatst online: 15-02 15:40
Public Property FirstName() As String
Get
Return _FirstName
End Get
Set(ByVal value As String)
_FirstName = value
End Set
End Property
Haal die ( ) eens weg na de declaratie van FirstName?

Everytime I suffer I become a better man because of it


Verwijderd

Invisible_man schreef op dinsdag 04 juli 2006 @ 23:19:
public maken ipv private.

Edit: Sorry, te snel beoordeeld, je gebruikt z'n get-set functie. Je zou het ook gewoon kunnen proberen om je variabele zelf public te maken en dus geen get-set functie toepassen.
Dat is nogal lelijk vanuit ee OO oogpunt.
[b][message=26077026,noline]Invisible_man schreef op dinsdag 04 juli 2006 @ 23:19

Maar je hebt hier staan: Set(ByVal value As String)

Volgens mij hoef je bij Set geen type aan te geven, die is verder naar boven al aangegeven. Dus Set zonder de haakjes enzo.
Een Set heeft die haakje zeer zekers nodig (de structuur van de property wordt zelfs door VS vanzelf al neergezet. Je hoeft dus alleen de "return bla bla" of eventueel wat complexere code in te vullen. En in de Set meestal alleen "variable X = value" eventueel met wat checks.

  • Ru__
  • Registratie: Juni 2004
  • Niet online
Is het probleem hier niet dat je een waarde aan een variabele toekent in het declaratiegebied van een class?
Probeer eens:
Dim bla As String = test.LastName()

  • user109731
  • Registratie: Maart 2004
  • Niet online
Ru__ schreef op dinsdag 04 juli 2006 @ 23:42:
Is het probleem hier niet dat je een waarde aan een variabele toekent in het declaratiegebied van een class?
Probeer eens:
Dim bla As String = test.LastName()
Edit: je had wel gelijk dus :)

[ Voor 29% gewijzigd door user109731 op 05-07-2006 14:05 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:19
Zoals reeds gezegd:
Sinds wanneer heeft een property haakjes ?

Ik zie in de MSDN wel dat je een property in VB.NET een parameter-list kunt meegeven (en dan heb je idd haakjes nodig). Ik zie in de MSDN ook dat er idd haakjes staan bij de property definitie. Hoe lelijk en verwarrend.
Echter, die haakjes zal je niet moeten gebruiken bij de property 'aanroep', geloof ik.

Dus:
code:
1
bla = test.LastName

https://fgheysels.github.io/


  • user109731
  • Registratie: Maart 2004
  • Niet online
Ik heb je class name gewoon onderaan een standaard, nieuwe windowsApplication geplakt, en dit in een eventhandler van een button:
Visual Basic .NET:
1
2
3
4
        Dim test As New Name("Karolien", "Van Het Hof")
        Dim bla As String
        bla = test.LastName()
        MsgBox(bla)

En dit werkt toch gewoon goed in zowel VS 2003 als VS 2005... Dus vermoedelijk ligt je fout ergens anders?

@whoami: die haakjes voegt de VB IDE idd zelf in zodra je een property maakt, maar in je aanroep is het niet nodig (en daar doetie het dus ook niet). Ik zou het dan ook niet doen, om verwarring met functies te voorkomen :)

[ Voor 9% gewijzigd door user109731 op 05-07-2006 08:54 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:19
Grote prutser schreef op woensdag 05 juli 2006 @ 08:54:

@whoami: die haakjes voegt de VB IDE idd zelf in zodra je een property maakt, maar in je aanroep is het niet nodig
Dat zeg ik. :)
(en daar doetie het dus ook niet). Ik zou het dan ook niet doen, om verwarring met functies te voorkomen :)
Als ik de code i/d startpost bekijk, dan gebruikt hij wel haakjes bij de aanroep. :)
Maar goed, blijkbaar mogen ze er wel staan. Dit is idd verwarrend en lelijk.

TS: welke foutmelding krijg je dan precies ?

[ Voor 14% gewijzigd door whoami op 05-07-2006 08:59 ]

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 14-02 12:34

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op woensdag 05 juli 2006 @ 08:58:
Als ik de code i/d startpost bekijk, dan gebruikt hij wel haakjes bij de aanroep. :)
Maar goed, blijkbaar mogen ze er wel staan. Dit is idd verwarrend en lelijk.
Ja, als je reserved words wil gebruiken als propertyname, classname, whatever kan je die omgeven door [ ] :)

Dat kan je ook gebruiken in je aanroep, zoals bijvoorbeeld bij [Assembly]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Als ik het volgende probeer:
code:
1
2
    Dim test As New Name("Karolien", "Van Het Hof")
    Dim bla As String = test.LastName()

dan doet ie het wel.

Als ik het volgende probeer:
code:
1
2
3
    Dim test As New Name("Karolien", "Van Het Hof")
    Dim bla As String
    bla = test.LastName()

dan krijg ik de foutmelding "Declaration expected" voor "bla"

Raar genoeg krijg ik de zelfde foutmelding "Declaration expected" als ik de functie msgbox probeer
Heb ik nu een verkeerd project aangemaakt? Ik heb gewoon bij new project en bij visual basic een windows application genomen.

  • user109731
  • Registratie: Maart 2004
  • Niet online
Aha, ik snap het :) Het is idd wat Ru_ al veel eerder zei...

Bovenaan in je class heb je ruimte voor het declareren van variabelen. Maar je kunt ze daar idd niet gebruiken of veranderen zoals je op de tweede manier doet. De eerste manier werkt wel, omdat je hier de variabele maakt, en er direct een startwaarde aangeeft. Bovenaan in je class zet je dus enkel je declaraties, het veranderen van deze variabelen zet je bijvoorbeeld in je eventhandlers of andere functies. Dubbelklik eens op je form, en voeg dan die code in. Je zult zien dat ze nu wel allebei werken.

Ik vind het best lastig om dit goed uit te leggen, dus als je het niet snapt even zeggen, misschien dat iemand anders het beter kan uitleggen :) Op de MS site staan goede quickstart tutorials die je misschien ook verder op weg kunnen helpen :)
Jup, ik bedoelde het meer als aanvulling. Sorry, zo stond het er niet idd.
Als ik de code i/d startpost bekijk, dan gebruikt hij wel haakjes bij de aanroep. :)
Ik had het over de IDE die bij het aanroepen van een property niet automatisch haakjes zet... Ik zal voortaan wat duidelijker formuleren :)

[ Voor 8% gewijzigd door user109731 op 05-07-2006 14:05 ]

Pagina: 1