[Last Call] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 253
  • Last Modified:

More Property help

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
sirbounty
Asked:
sirbounty
  • 6
  • 4
  • 2
1 Solution
 
Carl TawnSystems and Integration DeveloperCommented:
You mean use one property to set the values for a, b and c ? And pass the name of the one to set ?
0
 
sirbountyAuthor Commented:
yes ( I think )
0
 
Carl TawnSystems and Integration DeveloperCommented:
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
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
manchCommented:

   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
 
manchCommented:
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
 
sirbountyAuthor Commented:
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
 
sirbountyAuthor Commented:
>> 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
 
sirbountyAuthor Commented:
Odd - I haven't got notifications on these last two comments... :(
0
 
Carl TawnSystems and Integration DeveloperCommented:
>> 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
 
sirbountyAuthor Commented:
Oh well - it just looked sloppy to me to have

private mVar1
private mVar2
[...]
private mVar10

But ah well...
0
 
Carl TawnSystems and Integration DeveloperCommented:
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
 
sirbountyAuthor Commented:
Beyond my 'current' understanding - but thanx.
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 6
  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now