|
|
|
Visual Basic lets you create a default property or method by simply selecting the "(Default)" item in the combo box that appear if you click the Advanced button in the Procedure Attributes dialog box. (You can display this dialog from the Tools menu, or by right-clicking on a property name in the right-most pane in the Object Browser.)
While default properties are cool and make your object easier to use, you should be at least aware that they have their downside as well, in that they tend to hide programming errors in the code that uses the object. To prove this, create a CPerson class module, then add a Name property using this single line of code: |
Click here to copy the following block | Public Name As String
Then write this code in a form module Private Sub Command1_Click() Dim A As New CPerson Dim B As CPerson Dim C As New CPerson A.Name = "Joe Doe" B = A C = A End Sub |
Because of the missing SET statements - by far the most common error when working with objects - the B=A statement raises error 91 "Object variable or With block variable not set", whereas the C=A statement raises a more cryptic error 438 "Object doesn't support this property or method". This is OK, because we made a programming mistake and VB has been as kind. However, if you now make Name the default property of the CPerson class, you'll find that in some cases no error is raised, thus preventing the alarm bell from ringing in your head. In fact, while the B=A statement still raises error 91, the C=A assignment now executes flawlessly. Unfortunately, though, the results aren't what you expected: VB has silently created a new instance of the CPerson class (the C variable) and has assigned it the default property of the object held in the A variable. In the end you have two objects instead of one, and the code isn't doing what it was supposed to do.
The solution (sort of) is simple: don't create default properties. Or at least, double-check that all assignments between objects are prefixed by the SET command.
|
|
|
|
Submitted By :
Nayan Patel
(Member Since : 5/26/2004 12:23:06 PM)
|
|
|
Job Description :
He is the moderator of this site and currently working as an independent consultant. He works with VB.net/ASP.net, SQL Server and other MS technologies. He is MCSD.net, MCDBA and MCSE. In his free time he likes to watch funny movies and doing oil painting. |
View all (893) submissions by this author
(Birth Date : 7/14/1981 ) |
|
|