Using readonly properties in a class...

  • Thread starter Thread starter Brad Pears
  • Start date Start date
B

Brad Pears

I have a class that has readonly properties in it. I am fairly new to OO
design and development so please let me know if this doe snot make sense...

The reasopn why I have these read only porperties is becasue these
particular properties are not set programatically - they are as a result of
a calualtion of two other properties as shown below...

public readonly property PSFLiveFactored() as decimal
Get
return PSFLiveFactored = PSFLive * 1.5
end get
end property

I have one readonly property that is derived from an SQL Stored procedure
(called when the object is instantiated) which selects a row from a view.
This particular view includes some calculated rows - one of which I want a
few of my read only properties to contain - as opposed to the way I am
setting them above. Since I cannot (and do not want anyone to) set this
property in code (hence a readonly property), how do I actaully set an
initial value for a read only property?

Would I have to call a private method in the "Get" area that would then
retrieve the data from the DB and use that returned value to set the
property?


Thanks, Brad
Thanks, Brad
 
I have a class that has readonly properties in it. I am fairly new to OO
design and development so please let me know if this doe snot make sense...

The reasopn why I have these read only porperties is becasue these
particular properties are not set programatically - they are as a result of
a calualtion of two other properties as shown below...

public readonly property PSFLiveFactored() as decimal
Get
return PSFLiveFactored = PSFLive * 1.5
end get
end property

I have one readonly property that is derived from an SQL Stored procedure
(called when the object is instantiated) which selects a row from a view.
This particular view includes some calculated rows - one of which I want a
few of my read only properties to contain - as opposed to the way I am
setting them above. Since I cannot (and do not want anyone to) set this
property in code (hence a readonly property), how do I actaully set an
initial value for a read only property?

Would I have to call a private method in the "Get" area that would then
retrieve the data from the DB and use that returned value to set the
property?


Thanks, Brad

Define a Private variable to hold the value from the stored procedure.
Set that private variable after you execute the stored procedure
during initialization. Then in the readonly Property's Get method use
the private variable in its calculation.
 
Like this:

Private _FieldValue As <some type>

Public Property Something As <some type>
Get
Return _FieldValue
End Get
Private Set
_FieldValue = value
End Set
End Property

Tom Dacon
Dacon Software Consulting
 
Oops, what I gave you in my first response was the usual way that you use
varying scope:

Private _FieldValue As <some type>

Public Property Something As <some type>
Get
Return _FieldValue
End Get
Private Set
_FieldValue = value
End Set
End Property

what you might do in your case is something like:

Private _FieldValue As <some type> = Nothing

Public ReadOnly Property Something As <some type>
Get
If _FieldValue Is Nothing Then
_FieldValue = GetFieldValueFromSomewhere()
End If
Return _FieldValue
End Get
End Property

and of course the details of how your code tells whether the value has been
set depends on your data.

Tom Dacon
Dacon Software Consulting
 
Perfect. That makes more sense then calling a method to run the Stored Proc
and return the value in the read only properties "Get" method because then
it would be running that everytime someone wants to use that value.
Instead, run it once at object instantiation, then set it once to the
private variable, then the read only properties get method "gets" it from
there when it is requested.. Makes a lot more sense...

Thanks!
 
Back
Top