Solved

More Property help

Posted on 2006-07-13
12
229 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
 
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
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
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

Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

Join & Write a Comment

Since .Net 2.0, Visual Basic has made it easy to create a splash screen and set it via the "Splash Screen" drop down in the Project Properties.  A splash screen set in this manner is automatically created, displayed and closed by the framework itsel…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…

762 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

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now