Default property VB.NET

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer een default property te maken die een klasse teruggeeft.
Dat gaat allemaal goed, maar die klasse moet ook een default property teruggeven en daar gaat het mis:
Ik wil dat ie als default een string teruggeeft, maar dat pikt VB.net niet zonder dat die property een parameter heeft.
Lijkt erop dat het gewoon niet kan dus ik dacht, dan maar via overloading.
1 property die het object teruggeeft en 1 die een string teruggeeft.
Nu wil ie dat niet doen omdat de parameters hetzelfde zijn en alleen het returntype anders 8)7

Ik heb een smerige hack ontdekt hoe het wel werkt, maar die is wel heel ranzig.
Als ik namelijk 1 property een Variant meegeef als parameter en de ander een string, dan werkt het wel, maar dat is echt niet de bedoeling eigenlijk.

Pseudo code voorbeeldje van gewenste aanroepen
code:
1
2
3
4
'Deze 3 moeten hetzelfde geven
Msgbox Foo("Key")
Msgbox Foo.Item("Key")
Msgbox Foo.Item("Key").Value


Met bijv VB6 kon ik zonder problemen voor elkaar krijgen. Kan me haast niet voorstellen dat dit niet mogelijk is met .NET 2008
Een zetje in de goede richting zou ik prijs stellen

Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Zonder meer context (als in: waarom zou je iets op drie verschillende manieren willen kunnen aanroepen?) is het lastig om een zetje in de richting te geven. :)

Sundown Circus


Acties:
  • 0 Henk 'm!

  • boe2
  • Registratie: November 2002
  • Niet online

boe2

'-')/

Ik snap jouw hele property praat niet goed eigenlijk. In je eerste voorbeeld roep je een functie aan, wat perfect mogelijk is als deze een string teruggeeft. In de volgende twee lijnen is diezelfde Foo echter geen functie, maar een object met eigen functies/properties, dat zijn twee verschillende zaken natuurlijk. Je kan je klasse eventueel wel een een return value met eigen properties laten geven (dan zou je iets zoals "Foo('key').Item.Value" krijgen), maar ik denk niet dat dat hetgene is dat je zoekt. Ik denk dat je eerder een lesje OOP zoekt ;)

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik doe dit om zo pijnloos mogelijk een enorme app te migreren.
Ik probeer effe een iets wat simpeler voorbeeld neer te zetten

Visual Basic:
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
31
Public Class Persoon

    Private mVoornaam As String
    Private mAchternaam As String

    Public Property Voornaam() As String
        Get
            Return mVoornaam
        End Get
        Set(ByVal value As String)
            mVoornaam = value
        End Set
    End Property

    Public Property Achternaam() As String
        Get
            Return mAchternaam
        End Get
        Set(ByVal value As String)
            mAchternaam = value
        End Set
    End Property

    Default Public ReadOnly Property Naam() As String
        Get
            Return String.Concat(mVoornaam, " ", mAchternaam)
        End Get
    End Property


End Class


Dit mocht in VB.NET 2003 volgens mij.

Acties:
  • 0 Henk 'm!

Verwijderd

je zit op de juiste weg, maar je bent er nog lang niet ;)

Visual Basic .NET:
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
31
32
33
Imports System.Collections.ObjectModel

Public Class test

    Public tests As Collection(Of String)

    Public Sub New()
        tests = New Collection(Of String)
    End Sub

    Public Sub Toevoegen(ByVal s As String)
        tests.Add(s)
    End Sub

    Default Public ReadOnly Property Item(ByVal index As Integer) As String
        Get
            Return tests(index)
        End Get
    End Property
End Class

Public Class test2

    Dim t As test

    Public Sub New()
        t = New test
        t.Toevoegen("Naam")

        MessageBox.Show(t(0))
    End Sub

End Class

Bij een default property ben je verplicht om argumenten op te geven ;) In VB6 (!) kon je nog default properties zonder argumenten gebruiken, maar dat is OO gezien niet correct.

[ Voor 10% gewijzigd door Verwijderd op 11-09-2009 22:20 ]


Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17-09 15:08
Ik denk dat je pech gehad hebt.

De manier van default properties die in VB6 mogelijk was is niet meer mogelijk in .Net. En dat is denk ik maar goed ook.

Hail to the king baby!


Acties:
  • 0 Henk 'm!

Verwijderd

je kan altijd nog de ToString overriden, maar dat is "bad practice".
Pagina: 1