Solved

More Property help

Posted on 2006-07-13
12
236 Views
Last Modified: 2010-04-23
Maybe a dumb question, but I am still trying to grasp properties...

If I'm declaring:

Private a as string
Private b as string
Private c as string

Can I use only 1 property, passing the 'name'?

Public Property MyProperty(myString as String) as String
??
0
Comment
Question by:sirbounty
  • 6
  • 4
  • 2
12 Comments
 
LVL 52

Expert Comment

by:Carl Tawn
ID: 17099508
You mean use one property to set the values for a, b and c ? And pass the name of the one to set ?
0
 
LVL 67

Author Comment

by:sirbounty
ID: 17099528
yes ( I think )
0
 
LVL 52

Expert Comment

by:Carl Tawn
ID: 17099634
Then the answer is no.

You can set multiple values from within a single property, but you can't tell it which to set, unless you did it based on the value passed. But if you did that then you would confuse the usage of the property.
0
Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

 
LVL 6

Expert Comment

by:manch
ID: 17099645

   U mean a property like this :

   Public Property MyProp(ByVal str As String) As String
        Get
            Return str
        End Get
        Set(ByVal Value As String)
            If str = "a" Then
                a = value
            ElseIf str = "b" Then
                b = value
            ElseIf str = "c" Then
                c = value
            End If
        End Set
    End Property
0
 
LVL 6

Expert Comment

by:manch
ID: 17099669
one more thing if u want the same values as parameters passed then u have to use the if statements for Get also

i.e.

Get
           If str = "a" Then
                return a
            ElseIf str = "b" Then
                return b
            ElseIf str = "c" Then
                return c
            End If
End Set
0
 
LVL 67

Author Comment

by:sirbounty
ID: 17100636
Great manch - I'll try this out.

What do I reference in my "get"?

If I'm using Int, for example:

Private mintBoard1 as Integer
[...]
Private mintBoard10 as Integer

Public Property BoardLength(byVal myBoard as Integer) As Integer
  Get
    Select Case myBoard
      Case ???  ' Would this be "mintBoard1" or something else?
        Return mintBoard1
0
 
LVL 67

Author Comment

by:sirbounty
ID: 17100644
>> But if you did that then you would confuse the usage of the property.<<

How so?  Remember - I'm still new to Properties...the last thing I need is more confusion! :^)
0
 
LVL 67

Author Comment

by:sirbounty
ID: 17100728
Odd - I haven't got notifications on these last two comments... :(
0
 
LVL 52

Accepted Solution

by:
Carl Tawn earned 100 total points
ID: 17101251
>> How so?

A property describes something (i.e. Color, Name, Age). If you start making the inner workings overly complicated then you make it more difficult to understand what the property does.

Take an example, which of these makes more sense from a user perspective:

    MyObj.Color("a") = "Blue"
    MyObj.Color("b") = "Red"
    MyObj.Color("c") = "Green"

Or simply:

    MyObj.Color = "Blue"


The first is more confusing for anybody using your class because they would need to understand the inner workings of the object to know what "a", "b" and "c" mean. Whereas the second is a simple property name and it is clear from the syntax what it is doing.

If you need to do different things based on a parameter then you should use a method instead with a name that gives some indication to the user as to what to expect it to do.
0
 
LVL 67

Author Comment

by:sirbounty
ID: 17101796
Oh well - it just looked sloppy to me to have

private mVar1
private mVar2
[...]
private mVar10

But ah well...
0
 
LVL 52

Expert Comment

by:Carl Tawn
ID: 17101871
Depending on what you are trying to achieve, there may be alternatives to using properties. If you wanted a large number of properties but not have to create variables for each one then you could opt for exposing a HashTable via a property and that would then allow your users to add Name/Value pairs through a single property.

This, of course, would require a little more validation within the property itself to make sure the user doesn't add anything they shouldn't. You could even have a method called SetProperty that takes a property name or Enum and a value:

    Private _hash As New HashTable()

    Public Sub SetProperty(ByVal name As String, ByVal value As String)
 
        _hash[name] = value

    End Sub
0
 
LVL 67

Author Comment

by:sirbounty
ID: 17101902
Beyond my 'current' understanding - but thanx.
0

Featured Post

Live: Real-Time Solutions, Start Here

Receive instant 1:1 support from technology experts, using our real-time conversation and whiteboard interface. Your first 5 minutes are always free.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

This article explains how to create and use a custom WaterMark textbox class.  The custom WaterMark textbox class allows you to set the WaterMark Background Color and WaterMark text at design time.   IMAGE OF WATERMARKS STEPS Create VB …
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
Windows 10 is mostly good. However the one thing that annoys me is how many clicks you have to do to dial a VPN connection. You have to go to settings from the start menu, (2 clicks), Network and Internet (1 click), Click VPN (another click) then fi…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

776 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question